2014-07-16 31 views
1

我正在使用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++編寫的,所以編譯器不知怎的搞清楚了,但是有些東西在這裏被絆倒了。

+2

將.m文件重命名爲.mm –

+0

選擇文件列表中的文件,打開文件屬性面板。有一個部分可以指定文件的類型。 –

+0

@HotLicks - 嗨。我曾嘗試將類型設置爲「C++頭」,但沒有任何效果。此外,該項目已經有很多隻有頭文件,它已經編譯爲C++,即使它們的「類型」被設置爲默認「C頭」 – null

回答

4

Xcode爲任何名爲filename.mm的文件激活C++編譯器。我猜你的文件名爲filename.m

+0

它實際上被稱爲FastDelegate.h,並且是僅標題(所以沒有.m或.mm)所有其他文件都是.cpp,並且該項目是一個C++項目。 – null

相關問題