web-dev-qa-db-ja.com

仮想ベースクラスデストラクタへの「未定義の参照」

可能性のある複製:
未定義の参照/未解決の外部シンボルエラーとは何ですか。どのように修正しますか?

Javaの経験があり、現在はC++コースを行っています。私はインターフェースを書きたいと思っていましたが、インターネットの助けを借りても解決できないデストラクタでいくつかのトラブルに遭遇しました...ここに私のコードがあります:

    class Force {

    public:

    virtual ~Force();
    virtual VECTOR eval(VECTOR x, double t);

};

class InvSquare : public Force {

    public:

    InvSquare(double A) {

        c = A;

    }

    ~InvSquare(){};

    VECTOR eval(VECTOR x, double t) { // omitted stuff }

    private:
    double c;

};

基本クラスの仮想デストラクタと派生クラスの非仮想デストラクタを宣言しようとしましたが、「 `Force ::〜Force() 'への未定義の参照」というエラーが表示されます。それはどういう意味ですか、どうすれば修正できますか?

これがばかげた質問なら許してください!

助けてくれてありがとう、noctilux

27
noctilux

デストラクタを宣言しましたが、定義していません。宣言を次のように変更します。

virtual ~Force() {}

何もしないように定義します。

また、抽象インターフェースのすべての関数pure virtualを作成する必要があります。そうしないと、それらも定義する必要があります。

virtual VECTOR eval(VECTOR x, double t) = 0;
37
Mike Seymour