そのため、cocos2d + box2d プロジェクトで Box2D (C++) ポインターを他の Objective-C++ クラスに公開したいと考えています。C++ クラス b2World を参照し、Box2D.h をインポートするインターフェイスでメソッド「getWorld」を宣言します。プロジェクト内のすべてのファイルの拡張子は .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 (以前にコンパイルされたもの) が客観的な 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++ ソース。何を与える..?