【发布时间】:2012-08-21 07:07:07
【问题描述】:
所以我想在我的 cocos2d + box2d 项目中公开一个 Box2D (C++) 指向其他 Objective-C++ 类的指针。我在我的接口中声明了一个方法“getWorld”,它引用了 C++ 类 b2World 并导入了 Box2D.h。我项目中的所有文件都是 .mm 扩展名,我得到以下编译错误:
In file included from DebugDrawLayer.mm:2:
In file included from World.h:10:
In file included from external/Box2d/Box2D/Box2D.h:34:
external/Box2d/Box2D/Common/b2Settings.h:22:10: fatal error: 'cassert' file not found
#include <cassert>
我猜 Box2D.h 不知何故被编译为 C 而不是 C++,但我不明白这是怎么发生的。根据日志,包含链显然是从 .mm 文件开始的。
更新:
日志显示 World.mm(之前编译)清楚地编译为 Objective-c++
CompileC Objects-normal/i386/World.o World.mm normal i386 objective-c++ com.apple.compilers.llvm.clang.1_0.compiler
但是对于 DebugDrawLayer.mm 它说的是objective-c
CompileC Objects-normal/i386/DebugDrawLayer.o DebugDrawLayer.mm normal i386 objective-c com.apple.compilers.llvm.clang.1_0.compiler
这两个文件都设置为默认值 - Objective-C++ 源代码。什么给了..?
【问题讨论】:
-
在 Xcode 主编辑器中打开
DebugDrawLayer.mm。然后打开文件检查器(视图 > 实用程序 > 显示文件检查器)。在文件检查器中有一个文件类型弹出菜单。选择什么文件类型?是“默认 - Objective-C++ 源代码”吗? -
@robmayoff 是的,它是“默认 - Objective-C++ 源代码”。这里似乎有一些黑魔法在起作用:)
标签: objective-c ios cocos2d-iphone objective-c++ box2d-iphone