純粋なc++クラス(.cpp)と純粋なobjective-cオブジェクト(.m)の間にobjective-c ++ラッパー(.mm)を作成しようとしています。良い実例はgithubにあります。これを問題なくビルドして実行できます。
ただし、c++クラスの静的メンバー関数にアクセスする必要があります。既存の関数をすべて削除し、静的メンバー関数を導入することで、githubの例を変更しました。
// ==================
// DummyModel.h
// ==================
class DummyModel
{
public:
static int test ();
};
// ==================
// DummyModel.cpp
// ==================
#include "DummyModel.h"
static int test ()
{
int x = 1;
return x;
}
// ==================
// DummyModelWrapper.h
// ==================
#import <Foundation/Foundation.h>
@interface DummyModelWrapper : NSObject
- (int) test;
@end
// ==================
// DummyModelWrapper.mm
// ==================
#import "DummyModelWrapper.h"
#import "DummyModel.h"
@implementation DummyModelWrapper
- (int) test
{
int result;
result = DummyModel::test();
return result;
}
@end
これにより、次のエラーが発生します。
Undefined symbols for architecture i386:
"DummyModel::test()", referenced from:
-[DummyModelWrapper test] in DummyModelWrapper.o
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)
エラーを引き起こしているのは、DummyModelWrapper.mmでテストするためのこの参照です。
result = DummyModel::test();
テストプロジェクトは、編集されていない形式で正常にコンパイルおよび実行されるgithubプロジェクトから適応されます(インスタンスDummyModel
でメンバー関数をインスタンス化して呼び出します)。静的メンバーを追加してラッパーオブジェクトからアクセスしようとするとすぐにエラーが発生します。
私はstackoverflowや他の場所で見つけることができるすべてを読みましたが、非静的メンバー関数を含む例しか見つけることができません。
参照
http://www.philjordan.eu/article/mixing-objective-c-c++-and-objective-c++http://robnapier.net/blog/wrapping-cppfinal-edition-759
http
://www.boralapps .com / an-objective-c-project-that-uses-c / 294 /
環境
xcode4.5.2/ osx8.2(ios5 +をターゲット)