Оболочка target-c, вызывающая статические функции-члены C++

Я пытаюсь сделать обёртку объективного C++ (.mm) между чистым классом C++ (.cpp) и чистым объектом target-c (.m). Хороший рабочий пример можно найти на 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 и вызывает функции-члены в экземпляре). Ошибка возникает, как только я пытаюсь добавить статический член и получить доступ к нему из объекта-оболочки.

Я прочитал все, что могу найти в stackru и в других местах, но могу найти только примеры, включающие нестатические функции-члены.

Рекомендации
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/

среда
xcode 4.5.2/osx8.2 (для ios5+)

1 ответ

Решение

Внутри DummyModel.cpp замените

static int test ()
{
    ...
}

От

int DummyModel::test ()
{
    ...
}
Другие вопросы по тегам