2011-12-22 52 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

相关问题