128

gcc 4.3 で C++ をコンパイルすると、このメッセージが表示されます

error: ‘NULL’ was not declared in this scope

現れたり消えたりして、その理由がわかりません。なんで?

ありがとう。

4

7 に答える 7

184

NULLはキーワードではありません。これは、一部の標準ヘッダーで定義されている識別子です。含めることができます

#include <cstddef>

std::size_t. _

于 2009-01-20T17:14:34.367 に答える
39

GCC は C++11 に向けて段階を踏んでいます。これがおそらく、 NULL定数を使用するためにcstddefを含める必要がある理由です。C++11 で推奨される方法は、バージョン 4.6 以降の GCC で実装されている新しいnullptrキーワードを使用することです。nullptrは暗黙的に整数型に変換できないため、ポインター型と整数型の両方でオーバーロードされた関数の呼び出しを明確にするために使用できます。

void f(int x);
void f(void * ptr);

f(0);  // Passes int 0.
f(nullptr);  // Passes void * 0.
于 2011-11-30T14:16:45.270 に答える
10

NULLキーワードではありません。これは 0 のマクロ置換であり、stddef.horcstddefに入る、と私は信じています。#included適切なヘッダー ファイルがないため、g++ はNULL通常の変数名と見なし、宣言していません。

于 2009-01-20T17:13:58.330 に答える