Gcc 4.3でC++をコンパイルするとこのメッセージが表示されます
error: ‘NULL’ was not declared in this scope
それは現れたり消えたりしますが、その理由はわかりません。どうして?
ありがとう。
NULL
はキーワードではありません。これは、いくつかの標準ヘッダーで定義された識別子です。含めることができます
#include <cstddef>
std::size_t
のような他のいくつかの基本を含めて、スコープ内に収めます。
GCCはC++ 11に向けて対策を講じています。これが、おそらくNULL定数を使用するためにcstddefを含める必要がある理由です。 C++ 11で推奨される方法は、新しいnullptrキーワードを使用することです。これは、バージョン4.6以降のGCCで実装されています。 nullptrは暗黙的に整数型に変換できないため、ポインター型と整数型の両方でオーバーロードされた関数の呼び出しを明確にするために使用できます。
void f(int x);
void f(void * ptr);
f(0); // Passes int 0.
f(nullptr); // Passes void * 0.
NULL
はキーワードではありません。これは0のマクロ置換であり、stddef.h
またはcstddef
に含まれています。適切なヘッダーファイル#included
がないため、g ++はNULL
を通常の変数名と見なし、宣言していません。
他の回答を完了するには:C++ 11を使用している場合は、nullptr
を使用します。これは、nullを指すvoidポインターを意味するキーワードです。 (ポインタ型ではないNULL
の代わりに)
NULLは次の場所にもあります。
#include <string.h>
String.hは、どこかからNULLを取り込みます。
マクロNULLを宣言できます。 #includesの後に追加します:
#define NULL 0
または
#ifndef NULL
#define NULL 0
#endif
番号 ";"指示の最後に...