0

純粋な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 +をターゲット)

4

1 に答える 1

2

DummyModel.cpp 内で、置き換えます

static int test ()
{
    ...
}

int DummyModel::test ()
{
    ...
}
于 2012-12-31T17:47:40.947 に答える