繁体   English   中英

objective-c包装器调用c ++静态成员函数

[英]objective-c wrapper invoking c++ static member functions

我试图在纯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/

环境
xcode 4.5.2 / osx8.2(针对ios5 +)

在DummyModel.cpp里面,替换

static int test ()
{
    ...
}

通过

int DummyModel::test ()
{
    ...
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM