Saya mendapatkan pesan ini saat mengkompilasi C ++ di gcc 4.3
error: ‘NULL’ was not declared in this scope
Muncul dan menghilang dan saya tidak tahu mengapa. Mengapa?
Terima kasih.
Saya mendapatkan pesan ini saat mengkompilasi C ++ di gcc 4.3
error: ‘NULL’ was not declared in this scope
Muncul dan menghilang dan saya tidak tahu mengapa. Mengapa?
Terima kasih.
Jawaban:
NULL
bukan kata kunci. Ini adalah pengenal yang ditentukan dalam beberapa header standar. Anda bisa memasukkan
#include <cstddef>
Untuk memilikinya dalam ruang lingkup, termasuk beberapa dasar lainnya, seperti std::size_t
.
nullptr
kata kunci, yang merupakan kata kunci sebenarnya dan tidak memerlukan #include
s. Ini juga lebih aman daripada NULL
.
GCC mengambil langkah menuju C ++ 11, yang mungkin menjadi alasan mengapa Anda sekarang perlu menyertakan cstddef untuk menggunakan konstanta NULL . Cara yang disukai di C ++ 11 adalah dengan menggunakan kata kunci nullptr baru , yang diterapkan di GCC sejak versi 4.6. nullptr tidak secara implisit dapat diubah menjadi tipe integral, sehingga dapat digunakan untuk membedakan panggilan ke fungsi yang telah kelebihan beban untuk tipe pointer dan integral:
void f(int x);
void f(void * ptr);
f(0); // Passes int 0.
f(nullptr); // Passes void * 0.
NULL
tidak pernah menjadi kata kunci bawaan; itu adalah makro yang ditentukan dalam beberapa header C standar, termasuk <stddef.h>
(atau <cstddef>
). Bagaimana pengaruh gcc "mengambil langkah menuju C ++ 11"? Saya tidak melihat apa pun dalam pertanyaan yang menyiratkan bahwa kode (tak terlihat) dikompilasi dengan versi gcc / g ++ sebelumnya, atau dengan versi standar bahasa sebelumnya.
NULL
bukan kata kunci; itu substitusi makro untuk 0, dan masuk stddef.h
atau cstddef
, saya yakin. Anda tidak #included
memiliki file header yang sesuai, jadi g ++ melihatnya NULL
sebagai nama variabel biasa, dan Anda belum mendeklarasikannya.
Untuk melengkapi jawaban lainnya: Jika Anda menggunakan C ++ 11, gunakan nullptr
, yaitu kata kunci yang berarti penunjuk kosong yang mengarah ke null. (bukan NULL
, yang bukan tipe penunjuk)
NULL juga dapat ditemukan di:
#include <string.h>
String.h akan menarik NULL dari tempat lain.