2011-04-26 72 views
2

OK,這是真的很煩我有(幾乎是)最簡單的類可能的兩個文件:。a.cpp啊 啊:即使是最簡單的類不能編譯,「尚未宣佈

#ifdef A_H 
#define A_H 
class a{ 
    public: 
    a(); 
}; 
#endif 

和a.cpp

#include "a.h" 
a::a(){ 
} 

,但它不會編譯:

g++ a.cpp a.cpp:3: error: ‘a’ has not
been declared

很顯然,我做錯了什麼,但瓦特帽子?

固定的,我取代了用#ifdef來的#ifndef

回答

15

其因

#ifdef A_H 

需求是

#ifndef A_H 

通知 「N」,如如果沒有定義。

如果定義了A_H,前者只會編譯代碼,不是因爲您只在下一行定義它。

15

#ifndef更換#ifdef,然後再試一次。

有些IDE我覺得非常有用,它可以解析代碼,同時鍵入並以'gray'字體顯示不會編譯的代碼,就像當前的宏定義一樣。此外,運行

gcc -E

其次是你已經知道gcc參數,會告訴你什麼是代碼去預處理(宏預處理器解決後進行編譯,編譯建設工具鏈的第一步)。