objective-c包装器调用c++;静态成员函数 我试图在纯C++类(.cp)和纯ObjuleC对象(.m)之间创建ObjuleC++封装器(.mm)。可以举一个很好的例子。我可以毫无问题地构建和运行它 但是我需要访问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

objective-c包装器调用c++;静态成员函数 我试图在纯C++类(.cp)和纯ObjuleC对象(.m)之间创建ObjuleC++封装器(.mm)。可以举一个很好的例子。我可以毫无问题地构建和运行它 但是我需要访问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,c++,objective-c,xcode,C++,Objective C,Xcode,在DummyModelWrapper.mm中对测试的引用调用了错误: result = DummyModel::test(); 测试项目改编自github项目,该项目以未经编辑的形式编译并运行良好(它实例化DummyModel,并在实例上调用成员函数)。当我试图添加静态成员并从包装器对象访问它时,就会发生错误 我已经阅读了stackoverflow和其他地方的所有内容,但只能找到涉及非静态成员函数的示例 参考文献 环境 xcode 4.5.2/osx8.2(针对ios5+)在Dum

在DummyModelWrapper.mm中对测试的引用调用了错误:

   result = DummyModel::test();
测试项目改编自github项目,该项目以未经编辑的形式编译并运行良好(它实例化
DummyModel
,并在实例上调用成员函数)。当我试图添加静态成员并从包装器对象访问它时,就会发生错误

我已经阅读了stackoverflow和其他地方的所有内容,但只能找到涉及非静态成员函数的示例

参考文献


环境

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

在DummyModel.cpp内部,替换

static int test ()
{
    ...
}


如果在那个“.m”文件中调用C++代码,它不是应该是“.mm”文件扩展名吗?或者源文件中的注释不准确?不管怎样,请看下面的答案。是的,很抱歉,这是一个错误的打字错误,在问题中得到了修复。谢谢,这确实解决了问题,但我不明白为什么。定义和声明签名不应该匹配吗?你能指给我任何明确的在线引用吗?这是基本类/命名空间方法定义逻辑-你的声明必须包含类说明符,否则它不是类的方法,而是一个简单的函数(在这种情况下是静态函数),这是因为C++是基于C的。roots@Petesh,正如你注意到的,我的C++知识是非常基础的。代码>静态似乎有很多用途。引用C++中的Bruce Eckel思想,“静态关键字在C中被重载,在人们知道“过载”意味着什么之前,C++还增加了另一个含义。”(后来他把它描述为“混淆”)。我现在正在读很多书。我问这个问题,帮助我在C++和Obj-C,它教我如何少我知道。不过我还是设法让它工作了。
static int test ()
{
    ...
}
int DummyModel::test ()
{
    ...
}