我正在使用XCode 5.1.1中的C++項目。該項目編譯好的OSX,但是當我爲iOS構建時,我遇到了一個問題。編譯器產生的錯誤提示它認爲某些文件是C文件,而不是C++文件。所討論的文件全部看起來都是僅包含頭文件而沒有相應的cpp文件。XCode認爲C++文件在爲iOS構建時是C嗎?
作爲背景,該項目基於Cocos2d-x 3.0,並在幾周前爲iOS編好。從那以後,我加入了jl_signals,它使用了FastDelegate,我知道這些做了一些非標準的東西,這些東西超出了我的理解範圍。
這些都是一些錯誤,我得到的:
namespace fastdelegate {
...產生錯誤:
[...]/jlsignal/FastDelegate.h:142:1: Unknown type name 'namespace'
[...]/jlsignal/FastDelegate.h:142:23: Expected ';' after top level declarator
此外,問題找標準庫:
#include <new>
...產生錯誤
[...]]/jlsignal/ScopedAllocator.h:7:10: 'new' file not found
This堆棧溢出問題表明編譯器試圖將項目建立爲c而不是C++,這似乎符合症狀,但似乎很奇怪它僅隔離到這個特定的庫。
我想知道是否有一些構建階段或XCode特定的tickbox我忽視了某處。謝謝。
任何建議將不勝感激。
編輯:有人建議我將.m文件重命名爲.mm,但該文件是一個.h頭文件,所以我不能遵循這個建議。該項目中的所有其他C++文件都是.cpp文件,並且該項目肯定已成功編譯爲C++,直到我添加了該庫。
編輯2:好的我已經得到它的工作。事實證明,關於.m和.mm的建議畢竟是正確的。這一切都歸結爲這樣一個事實:在Cocos2d-x中,ios版本有一個來自mac build的獨立主文件,它被稱爲main.m.我將它改爲main.mm,一切都很順利。整個項目都是用C++編寫的,所以編譯器不知怎的搞清楚了,但是有些東西在這裏被絆倒了。
將.m文件重命名爲.mm –
選擇文件列表中的文件,打開文件屬性面板。有一個部分可以指定文件的類型。 –
@HotLicks - 嗨。我曾嘗試將類型設置爲「C++頭」,但沒有任何效果。此外,該項目已經有很多隻有頭文件,它已經編譯爲C++,即使它們的「類型」被設置爲默認「C頭」 – null