2009-01-20 45 views
101

沒有宣佈GCC 4.3錯誤:「NULL」在此範圍

error: ‘NULL’ was not declared in this scope 

它出現和消失編譯C++時,我得到這個消息,我不知道爲什麼。爲什麼?

謝謝。

+2

也許你沒有在消息的來源範圍內聲明NULL? – 2009-01-20 17:08:33

+1

您應該至少發佈提供錯誤的完整代碼。否則,通過查看錯誤字符串將很難分辨出發生了什麼。 – Naveen 2009-01-20 17:11:44

回答

160

NULL不是關鍵字。它是一些標準頭文件中定義的標識符。您可以包括

#include <cstddef> 

有它的適用範圍,包括一些其他的基本知識,如std::size_t

+0

上帝,我非常寵壞Java(null是一個關鍵字),我從來沒有想過NULL不會是C++中的關鍵字。感謝:) – 2011-10-04 19:45:28

10

NULL不是關鍵字;這是一個0的宏替代,我相信stddef.hcstddef。您沒有#included適當的頭文件,因此g ++將NULL視爲常規變量名稱,並且您尚未聲明它。

32

GCC正在採取步驟C++ 11,這可能是爲什麼你現在需要包括cstddef爲了使用NULL不變。 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. 
4

要完成其他答案:如果你是使用C++ 11,使用nullptr,這是一個關鍵字,意味着一個空指針指向null。 (而不是NULL,這不是指針類型)

0

您可以聲明宏NULL。添加後您的#includes:

#define NULL 0 

#ifndef NULL 
#define NULL 0 
#endif 

否 「;」在教學和指導。