2011-12-22 51 views
0

我不知道這是從我的最後一個愚蠢的錯誤,或者Xcode 4.2.1正在做一些事情,但我甚至無法編譯一個簡單的同時具有C++和ObjC文件。 我在過去做到了這一點,但不知何故,編譯器處理的C++頭文件作爲ObjC頭和投擲愚蠢錯誤,如在同一個項目中編譯C++和ObjC文件

我能夠編譯,如果我強迫編譯所有的文件從「項目設置」Apple LLVM編譯器3.0 - 語言>編譯源爲「ObjectiveC++」。 但是,這只是一個解決方法,我不想在代碼增長時與任何愚蠢的事情作鬥爭。

+2

對於包含(或#include)Objective-C和C++代碼的文件,您是否給它們指定了.mm文件擴展名? – pmdj 2011-12-22 18:36:18

+0

正在編譯的文件的擴展名是什麼? – Mark 2011-12-22 18:36:27

+0

項目中有4個文件Test.h Test.cpp AppDel.h和AppDel.m。 Test。*文件包含純C++代碼,而AppDel。*具有純粹的ObjectiveC代碼,AppDel.m包含'#import Test.h' – chunkyguy 2011-12-22 18:49:26

回答

3

我只是用我正在開發的一個項目做到了這一點。我相信@pmjordan是對的,您需要將任何引用C++代碼的文件重命名爲.mm文件,而不是.m。

+0

但在未來我打算使用box2d代碼,其中包含所有.cpp文件,我不認爲重命名是真正的選項 – chunkyguy 2011-12-22 18:51:43

+0

你可以從Objective-C文件(.m)中分別編譯完整的C++文件(只要確保它們具有.cpp擴展名),然後使用Obj-C++文件(.mm)來設計box2d和Cocoa代碼之間的接口。它們都編譯成可以鏈接在一起的.o文件。不同的文件只是告訴編譯器每個編譯單元遵循哪些規則。 – matthias 2011-12-22 19:10:21

+0

是的,謝謝,重命名將.m文件導入到.mm文件中解決了我的問題:) – chunkyguy 2011-12-22 19:15:31

0

在XCode 4.2中,您還可以使用右窗格中「標識和類型」檢查器中的「文件類型」設置來更改單個文件的類型。我會建議看看,如果它只與特定的頭文件,你有麻煩。也許把類型從Objective C頭改爲C++頭?

+0

是的,我已經做了沒有幫助 – chunkyguy 2011-12-22 18:53:29

相關問題