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 関数に引数として渡されるため、extern "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 に答える