2009-10-25 35 views
0

我想包括一些C++代碼到我的iPhone項目,我獲得以下編譯器錯誤:編譯器錯誤++在iPhone項目代號

「錯誤:預期初始化之前‘<’令牌」

在此代碼構造:

template<typename T, P_UINT_32 BEG, bool OQ, bool OVR, bool DBG> 
    P_UINT_32 EKType<T, BEG, OQ, OVR, DBG>::getSizeX() const { 
    return n; 
    } 

它看起來像的XCode編譯器不能識別這是一個有效的C++語法。我用.h和.mm命名了我的C++文件,並且我已經將這些文件的類型設置爲sourcecode.cpp.h和sourcecode.cpp.cpp

任何人都有一個想法,爲什麼我得到這個錯誤?

+0

哪一行是錯誤? – 2010-01-13 16:10:34

回答

1

您可能會在.M文件中包含標題。令人驚訝的是,這些東西可以被拉入,所以請確保您的.M文件的所有都重命名爲.MM。

+0

感謝您的建議。我將所有.m文件重命名爲.mm,但仍然出現相同的錯誤。 – 2009-10-26 01:29:26

+0

你將不得不看看你的構建日誌(Shift + Cmd + B)。查看發現錯誤時正在編譯哪個文件(不是在雙擊錯誤時打開哪個文件)。然後查看包含鏈來確定是否正在編譯任何非MM文件。 – 2009-10-26 01:39:46

+0

謝謝。所以,我正在查看構建日誌和當時正在編譯的文件,或者錯誤是.cpp文件。該文件包含一個.h(C++),就是這樣。除非你的意思是包含鏈的其他東西? – 2009-10-27 02:59:02

1

如果文件同時包含Objective-C和C++,則只需命名一個.mm文件即可。

如果該文件僅包含C++,它應具有擴展的.cpp

如果該文件是ObjC和C++的混合,那麼它應該具有擴展名.mm和具有它的類型設置爲sourcecode.cpp .objcpp

+0

是的,謝謝。我將它們改爲.cpp,但沒有任何區別 – 2009-10-26 01:28:50

0

您確定您要編譯的源文件包含EKType類(或結構)聲明和P_UINT_32聲明嗎?

如果編譯器不知道EKTypeP_UINT_32,我想你會得到一個類似的錯誤。