Donc, j'ai une classe abstraite Panel
et une implémentation MyPanel
. Ils ressemblent à ceci:Non résolu externe (constructeur de classe abstraite/destructeur)
class Panel : public QWidget
{
public:
Panel(QWidget* parent = 0) = 0;
virtual ~Panel() = 0;
// but wait, there's more!!
};
class MyPanel : public Panel
{
public:
MyPanel(QWidget* parent = 0);
~MyPanel() {}; // nothing to do here
};
MyPanel::MyPanel(QWidget* parent) :
Panel(parent)
{
// you must construct additional pylons
}
Je reçois des erreurs de l'éditeur de liens pour le constructeur/destructor de VC++
error LNK2019: unresolved external symbol "public: virtual __thiscall Panel::~Panel(void)" ([email protected]@[email protected]) referenced in function "public: virtual __thiscall MyPanel::~MyPanel(void)" ([email protected]@[email protected]) mypanel.obj
error LNK2019: unresolved external symbol "public: __thiscall Panel::Panel(class QWidget *)" ([email protected]@[email protected]@@@Z) referenced in function "public: __thiscall MyPanel::MyPanel(class QWidget *)" ([email protected]@[email protected]@@@Z) mypanel.obj
Pourquoi ai-je cette erreur de liens?
--- LA RÉPONSE ---
class Panel : public QWidget
{
public:
Panel(QWidget* parent = 0) : QWidget(parent) {};
virtual ~Panel() {};
// but wait, there's more!!
};
Je pensais que je l'avais essayé avant le déjeuner. Il se avère que j'avais tort.
Il semble que vous ayez quelques fautes de frappe. Pouvez-vous clarifier? Les déclarations de classe doivent se terminer par a; par exemple, la classe XXX {}; Vous avez également ce qui ressemble à un constructeur virtuel mais cela n'est pas valide en C++ – maccullt
Correction de mes fautes de frappe et ajout de la bonne solution. –
Dans votre "réponse" vous devez indiquer explicitement ce que vous avez changé (fournir des implémentations vides via {}). Dans le cas contraire, il s'agit d'un exercice pour le lecteur de comparer vos échantillons de code et comprendre ce qui est différent. – User