2017-01-12 1 views
-1

J'ai une question concernant Destructeurs de classes héritées:Qt C++ erreur destructor

J'ai une géométrie de classe parente:

Geometry.h: 
    #ifndef GEOMETRY_H 
    #define GEOMETRY_H 

    #include <QDialog> 
    class Geometry : public QDialog 
    { 
     Q_OBJECT 

    public: 
     explicit Geometry(QWidget *parent = 0); 
     virtual ~Geometry() {} 
    };   
    #endif // GEOMETRY_H 

et

Geometry.cpp 
    #include "Geometry.h" 
    #include "ui_Geometry.h" 

     Geometry::Geometry(QWidget *parent) : 
      QDialog(parent) {   } 

Quand je change Geometry.h à

virtual ~Geometry() ; 

et ajoutez ce qui suit à Geometry.cpp

Geometry::~Geometry(void) 
{ 
    // ... 
} 

Je reçois l'erreur « définition multiple de la géométrie :: ~ Géométrie() »

Pouvez-vous me dire pourquoi je reçois cette erreur? Je peux mettre du code dans le fichier .cpp-je ne peux pas?

+0

Comment construisez-vous votre programme? Utilisez-vous un IDE ou simplement un éditeur de texte? Vous êtes-vous souvenu de sauvegarder le fichier d'en-tête? Utilisez-vous le bon fichier d'en-tête? –

Répondre

3

Vous avez ce qui est une mise en œuvre complète du destructor:

virtual ~Geometry() {} 

puis vous ajoutez ce qui est aussi une mise en œuvre complète du destructor:

Geometry::~Geometry(void) 
{ 
    // ... 
} 

Ainsi, la erreur que vous recevez.

Pour résoudre ce problème, enlever les accolades vides de celui dans le fichier d'en-tête:

virtual ~Geometry(); 

Edit: Je vois que vous avez fait le changement, donc plus que probable ne pas reconstruire votre application entière avec le en-tête mis à jour