0

コードをコンパイルすると、.oファイルのように出力ファイルに関連しているように見える一連のエラーが発生します。なぜこのようなエラーが発生するのかわかりません。何か案は?

/tmp/ccjPLJVV.o: In function `PubSub::~PubSub()':
Video_process.cpp:(.text._ZN6PubSubD2Ev[_ZN6PubSubD5Ev]+0x12): undefined reference to `vtable for PubSub'
/tmp/ccjPLJVV.o: In function `main':
Video_process.cpp:(.text.startup+0x34): undefined reference to `vtable for PubSub'
Video_process.cpp:(.text.startup+0xeb): undefined reference to `PubSub::run()'
/tmp/ccjPLJVV.o:(.rodata._ZTI13Video_process[typeinfo for Video_process]+0x10): undefined reference to `typeinfo for PubSub'
collect2: ld returned 1 exit status

これは基本的に、コンパイルしようとしたときに得られる出力です。

4

3 に答える 3

1

実装されていないvirtualメソッドがあるようです。

class PubSub
{
    //virtual destructors, although pure
    //MUST have an implementation
    virtual ~PubSub() = 0 { } 

    /*virtual?*/ void Run(); // <--- have you implemented this one?
}; 
于 2012-05-24T19:24:30.307 に答える
0

メソッドを実装していても、リンクしていない可能性があります。GCC を使用している場合は、-oフラグが役に立ちます。main.cpp をコンパイルするときは、すべてのクラス .o ファイルを指定する必要があります。

于 2012-05-24T20:28:01.400 に答える
0

これは、コンパイラではなくリンカからのエラー メッセージです。リンカーは、宣言されているが定義されていないいくつかのシンボルを見つけることができません。一部のファイルでは、リンクして (ほとんどの場合) 実行可能ファイルを作成しようとします。解決策は、定義、つまり (コンパイルされた) コードにそれらの定義を提供することです。そのコードはすでに存在している可能性があり、「それに対してリンクする」(リンカーにそこでシンボルを検索するように指示する)か、そうでない可能性があります。その場合、それを提供する必要があります...

たとえば、クラスの実装を定義するファイルPubSubをリンカー/コンパイラ コマンド ラインに追加すると、役立つはずです ...

于 2012-05-24T19:51:16.570 に答える