這是一個奇怪的問題,我想知道是否有其他人看過。我們正在爲Mac和PC編寫跨平臺的C++代碼,並且這隻發生在Mac上。強制在Mac上使用C++代碼的正向聲明(使用Xcode)
說我有一個類,其.h文件看起來像這樣。
class X {
public:
int _myValue;
void myFunction();
}
我有另一個類,它的.h文件看起來像這樣:
#include "X.h"
class Y {
private:
X _myObj;
}
這不會編譯。我們得到一個錯誤,指出X未定義。解決方案是在Y.h文件中爲X添加前向聲明,如: class X;
我們已經做了一段時間,但現在我們正在進入情況不那麼好。例如,如果我們有一個.h文件,該文件在.h文件中定義了一個模板方法,並且該方法在另一個類中引用了一個方法,編譯器不知道任何關於它的信息。同樣,如果我們引用一個在包含的類中定義的枚舉,編譯器不會識別它(解決此問題的方法是將枚舉放在單獨的.h文件中,並且它很好地撿起了它)。
這是幾乎一樣,如果在編譯.cpp文件編譯器是不是從包含的.h文件中的數據拉。
我只是想知道是否有人看到過這樣的事情,或者有可能調查的途徑。
許多感謝...
'#include」Xh「'或''include」xh「'?你是否收到任何警告,如」找不到'X.h'「? – 2012-03-14 17:07:17
你能發表一個實際的(包括cpp文件)?當我嘗試編譯頭文件時,編譯器正確地抱怨說你的類聲明在最後缺少分號。當我解決這個問題時,代碼編譯得很好在Mac OS上使用gcc 4.2(我懷疑是你的實際頭文件包含了包含保護或'#pragma once',並且你的問題與此有關。) – 2012-03-14 17:10:49
你可能想看看你是否有舊的副本Xh頭文件是由編譯器代替的,而不是最新的頭文件。 – 2012-03-14 18:32:24