2016-08-12 16 views
0

このサイトには、この質問に関するいくつかの質問があります。私は答えを(ヘッダーファイルを含む)与え、彼らは私の問題を解決しないでください。NULL宣言されていない識別子

プロジェクトをVS2013からVS2015に移行しました。コンパイルした後、私はエラーを取得しています: "C2065 'NULL':宣言されていない識別子"。これはVS2013では発生しませんでした。私のコードに行き、 "NULL"の上に "ホバー"すると、ウィンドウは "#define NULL 0"と表示されます。私はNULLを右クリックして "peek definition"を開くことができます。ファイルvcruntime.hが開き、NULLの定義が表示されます。

NULL(+200回)が発生するたびにこのエラーが発生し続けるのはなぜですか?このファイルは読み取り専用です。

編集:

#ifndef NULL 
    #ifdef __cplusplus 
     #define NULL 0 
    #else 
     #define NULL ((void *)0) 
    #endif 
#endif 
+0

@Serhioそれは完全に有効ですC.あなたはどこからそのアイデアを得ましたか? – Lundin

+0

@Serhio IIRC '#define NULL 0'はCの標準です。それはなぜでしょうか? – Magisch

+1

@Lundin [7.17](http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf) "...これは実装定義のヌルポインタ定数に展開されます... "そのような定数に '((void *)0)'のようなポインタ型を持たなければならないのでしょうか? – Sergio

答えて

1

おそらくあなたは.hファイルが含まれていない、またはコンパイラが適切なフォルダを求めていません。見てくださいhttps://msdn.microsoft.com/en-us/library/d69tdh6e.aspx

+0

ディレクトリに含まれている(VC++ディレクトリ:.../Windowsキット\ 10 \ Include \ 10.0.10586.0 \ ucrt \)は、MSDNの記事CRTDBG.Hで提案されているヘッダーファイルの1つです。このヘッダファイルには、 "#include "があります。このヘッダーファイルには、NULLの定義が含まれています。問題は、このヘッダーファイルが既に私のプロジェクトに含まれている、私はまだエラーが発生します...しかし、この定義は灰色で表示されます(ifndef NULLの後)おそらくすでに他の場所で定義されていることを意味します。 – pistach

関連する問題