2013-04-10 73 views
1

这是我的基本代码:如何从extern“C”函数访问类变量?

这里的头文件:

/** 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; 
} 

的问题,现在看来,是我得到一个分段错误on cerr < < mystring < < endl;一行。 函数()需要是外部“C”函数,因为它作为参数传递给本机C函数。

任何想法?提前致谢。

+3

这将无法正常工作。C没有按不知道类和你的方法甚至没有返回值... – 2013-04-10 19:52:41

+0

代码是否编译? – Arun 2013-04-10 19:53:29

+0

C函数需要传递一个表示MyClass实例的参数。 – jxh 2013-04-10 19:53:35

回答

1

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

你应该做的反而是创建一个包装函数,它的指针的MyClass实例作为一个额外的参数,并执行所需调用:

extern "C" void MyClass_function(MyClass *obj, /* variables */) { 
    obj->function(/* variables */); 
} 
+0

好的,谢谢。基本上我需要将函数()传递给具有固定数量变量的curl_easy_setopt()。那么我将不得不做更多的挖掘,因为使用extern是一个死路一条。 – 2013-04-10 20:07:20