0

これは私を困惑させただけなので、私はここで質問すると思いました:

私は次のようなクラスを持っています:

class MyClass {
    public:
        void myThreadFunc();
};

それはヘッダーにあります。コンストラクター内

MyClass::MyClass() {
    ...
    boost::thread t(boost::bind(&MyClass::myThreadFunc, this));
    ...
}

私がやったように。コンパイル時のエラーはありません。ただし、次のようにリンクすると、次のようになります。

g++ -o test.exe main.o MyClass.o /*specify boost and other libraries */

私は得る:

MyClass.o:MyClass.cpp:(.text+0xa4): undefined reference to `MyClass::myThreadFunc()'
collect2: ld returned 1 exit status

これは意味がありません。私が特に奇妙に思うのは、それがリンカーエラーだということです。両方のオブジェクトファイルを含めました。

誰かが何が起こっているのか教えてもらえますか?関連性がある場合は、WindowsのMinGWを使用しています。

編集:

エピックは失敗します。cppファイルで関数を定義するときにMyClass::プレフィックスを忘れました。私はそれをチェックすることに決めませんでした。クラス定義の後にセミコリンを忘れるのとほぼ同じくらい悪いです。

4

1 に答える 1

2

MyClass::myThreadFunc()どこかに関数本体を書く必要があります。のコンストラクターを作成することは、メンバー関数MyClassを実装することとは異なります。MyClass::myThreadFunc()

C / C ++で関数を呼び出す場合は、どこかに関数本体が必要です。これがリンカーエラーである理由です。使用可能なすべてのオブジェクトファイルで関数本体を見つけようとしていますが、作成しなかったため、作成できません。

于 2011-07-13T02:36:01.270 に答える