2

いくつかの純粋仮想メソッドを持つ通常の抽象クラスがあります。クラス自体は共有ライブラリの一部です。共有ライブラリ自体のコンパイルはOKです。しかし、ライブラリが、共有ライブラリの抽象クラスから派生し、純粋仮想メソッドを定義する別のクラスを持つ別のプログラムにリンクされている場合、次のリンカ エラーが発生します。

私はこのようにコンパイルします..:

g++ -I../path/to/the/library main.cpp derived.cpp -L../path/to/the/library -lsomename -o shared 

リンカー エラーは次のとおりです。

libsomename.so: `AbstractClass::method()' への未定義の参照

抽象クラスが純粋な仮想メソッドにアクセスできないようですが、ライブラリ内のどこにも抽象クラスのインスタンスを作成しようとしません。

何が問題なのですか?

4

1 に答える 1

1

抽象クラスを定義するときは、すべての関数を仮想化し、=0 で終了する必要があります。

class DPReporterI
{
public:
    virtual uint32 getProviderCount()=0;
    virtual uint32 getProviderId(uint32 index)=0;

    virtual uint32 getLastRate(uint32 id)=0;
    virtual void getName(uint32 id, char* buff, uint32 size)=0;
};

これを行うことを確認してください。動作するはずです。

于 2010-04-19T06:41:49.183 に答える