Quindi, ho una classe astratta Panel
e un'implementazione di esso MyPanel
. Hanno un aspetto simile a questo:Esterno non risolto (costruttore/distruttore di classe astratta)
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
}
che sto ricevendo per il costruttore/distruttore da 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
Perché mi appare questo errore linker?
--- --- LA RISPOSTA
class Panel : public QWidget
{
public:
Panel(QWidget* parent = 0) : QWidget(parent) {};
virtual ~Panel() {};
// but wait, there's more!!
};
Ho pensato che avevo provato questo prima di pranzo. Ho scoperto che mi ero sbagliato.
Sembra che tu abbia alcuni refusi. Puoi chiarire? Le dichiarazioni di classe devono terminare con a; ad es., classe XXX {}; Anche tu hai quello che sembra un costruttore virtuale ma che non è valido in C++ – maccullt
corretto i miei errori di battitura e ho aggiunto la soluzione corretta. –
Nella tua "risposta" devi indicare esplicitamente cosa hai cambiato (in pratica fornisci implementazioni vuote tramite {}). Altrimenti è lasciato al lettore il compito di confrontare i campioni del codice e capire cosa è diverso. – User