2013-04-10 96 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