基本クラスMedia
といくつかの派生クラス、つまりDVD
、Book
などがあります...基本クラスは次のように記述されます。
class Media{
private:
int id;
string title;
int year;
public:
Media(){ id = year = 0; title = ""; }
Media(int _id, string _title, int _year): id(_id), title(_title), year(_year) {}
// virtual ~Media() = 0;
void changeID(int newID){ id = newID; }
virtual void print(ostream &out);
};
問題は、デストラクタがないと、GCC から一連の警告が表示されますclass has virtual functions but non-virtual destructor
が、それでもコンパイルされ、プログラムは正常に動作するということです。ここで、これらの迷惑な警告を取り除きたいので、仮想デストラクタを追加してコンパイラを満足させます。結果は、次のエラーでコンパイルされません。
undefined reference to `Media::~Media()`
デストラクタを純粋仮想化しても問題は解決しません。それで、何がうまくいかなかったのですか?