web-dev-qa-db-ja.com

エラー:「NULL」はこのスコープで宣言されていません

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

error: ‘NULL’ was not declared in this scope

それは現れたり消えたりしますが、その理由はわかりません。どうして?

ありがとう。

116
jackhab

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

#include <cstddef>

std::size_tのような他のいくつかの基本を含めて、スコープ内に収めます。

172

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.
38
Seppo Enarvi

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

10
David Thornley

他の回答を完了するには:C++ 11を使用している場合は、nullptrを使用します。これは、nullを指すvoidポインターを意味するキーワードです。 (ポインタ型ではないNULLの代わりに)

5
Leonardo Raele

NULLは次の場所にもあります。

#include <string.h>

String.hは、どこかからNULLを取り込みます。

0
Owl

マクロNULLを宣言できます。 #includesの後に追加します:

#define NULL 0

または

#ifndef NULL
#define NULL 0
#endif

番号 ";"指示の最後に...

0
Derzu