web-dev-qa-db-fra.com

"référence non définie" au destructeur de classe Virtual Base

Duplicata possible:
Qu'est-ce qu'une erreur de référence non définie/symbole externe non résolu et comment puis-je la corriger?

J'ai une certaine expérience avec Java et je suis en train de suivre un cours C++. Je voulais essayer d'écrire une interface, mais j'ai rencontré des problèmes avec des destructeurs que je n'ai pas pu résoudre, même avec l'aide sur Internet ... Voici mon code:

    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;

};

J'ai essayé de déclarer un destructeur virtuel pour la classe de base et un non-virtuel pour la classe dérivée, mais j'obtiens une erreur disant "référence non définie à` Force :: ~ Force () '". Qu'est-ce que cela signifie et comment puis-je y remédier?

Pardonnez-moi si c'est une question idiote!

Merci beaucoup pour votre aide, noctilux

29
noctilux

Vous avez déclaré le destructeur, mais vous ne l'avez pas défini. Remplacez la déclaration par:

virtual ~Force() {}

le définir pour ne rien faire.

Vous souhaitez également créer toutes les fonctions dans l'interface abstraite pure virtual, sinon elles devront également être définies:

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