Оболочка 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 ()
{
...
}