私は抽象クラスPanel
とその実装MyPanel
を持っています。彼らは、次のようになり:未解決の外部(抽象クラスのコンストラクタ/デストラクタ)
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
}
私は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
は、なぜ私はこのリンカエラーを取得していますから、コンストラクタ/デストラクタのためのリンカエラーを取得していますか?
--- --- ANSWER
class Panel : public QWidget
{
public:
Panel(QWidget* parent = 0) : QWidget(parent) {};
virtual ~Panel() {};
// but wait, there's more!!
};
私は昼食前にこれを試したと思いました。私は間違っていたことが分かります。
いくつかのタイプミスがあるようです。明確にすることはできますか? クラス宣言は、aで終わる必要があります。例えば、クラスXXX {}; また、仮想コンストラクタのように見えますが、C++では無効です – maccullt
私のタイプミスを修正し、正しい解決策を追加しました。 –
あなたの "答え"には、変更したものを明示する必要があります(基本的に空の実装を{}で提供する)。それ以外の場合は、コードサンプルを比較して何が違うのかを理解するための練習として残しておきます。 – User