Also, ich habe eine abstrakte Klasse Panel
und eine Implementierung davon MyPanel
. Sie sehen wie folgt aus:Ungelöste Externe (abstrakte Klasse Konstruktor/destructor)
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
}
Ich erhalte Linkerfehler für den Konstruktor/Destruktor von 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
Warum bin ich diesen Linkerfehler zu bekommen?
--- DIE ANTWORT ---
class Panel : public QWidget
{
public:
Panel(QWidget* parent = 0) : QWidget(parent) {};
virtual ~Panel() {};
// but wait, there's more!!
};
Ich dachte, ich dies vor dem Mittagessen versucht hatte. Stellt sich heraus, ich habe mich geirrt.
Es sieht aus wie Sie einige Fehler haben. Könntest Du das erläutern? Klassendeklarationen müssen mit einem beenden; z.B. Klasse XXX {}; Auch Sie haben, was aussieht wie ein virtueller Konstruktor, aber das ist nicht gültig in C++ – maccullt
Korrigiert meine Tippfehler und fügte korrekte Lösung hinzu. –
In Ihrer "Antwort" sollten Sie explizit darauf hinweisen, was Sie geändert haben (im Prinzip leere Implementierungen über {}). Ansonsten ist es eine Übung für den Leser, Ihre Code-Beispiele zu vergleichen und zu verstehen, was anders ist. – User