1

这是我的基本代码:

这是头文件:

/** Include the necessary things **/

Class MyClass{
    private:
        std::string mystring;
    /**
     * Declare constructor, methods, yada yada yada
     **/
};

这是源文件:

MyClass::MyClass(){
    mystring[0] = 0;
}

extern "C" MyClass::function(/* variables */){
    cerr << mystring << endl;
}

看来,问题在于我在cerr << mystring << endl;上遇到了分段错误。线。function()需要是一个外部“C”函数,因为它作为参数传递给本地 C 函数。

有任何想法吗?提前致谢。

4

1 回答 1

1

创建一个类成员extern "C"的用处有限,我建议避免这种将 C++ 方法暴露给 C 代码的方法。

您应该做的是创建一个包装函数,该函数将指向实例的指针MyClass作为附加参数,并执行所需的调用:

extern "C" void MyClass_function(MyClass *obj, /* variables */) {
    obj->function(/* variables */);
}
于 2013-04-10T19:53:50.247 回答