我想在纯C++类(.cpp)和纯粹的目标c对象(.m)之间做一个objective-C++包装(.mm)。一个好的工作示例可以是found on github。我可以构建并运行这个没有问题。objective-c包装调用c + +静态成员函数
但是我需要访问C++类中的静态成员函数。
// ==================
// 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即是测试我已经通过去除所有现有的功能,并引入一个静态成员函数修改的github上例调用错误:
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/
环境
xcode的4.5.2/osx8.2(靶向的ios5 +)
如果你在“.M”文件调用C++代码,应该不会是个“.mm”文件扩展名呢?或者,源文件中的评论可能不准确?无论如何,请参阅下面的[benjorbin's](http://stackoverflow.com/questions/14104510/objective-c-wrapper-invoking-c-static-member-functions/14104585#14104585)。 – WhozCraig
是的,对不起,这是一个错误的错字,在问题中修复 – foundry