我有一个基类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()`
使析构函数纯虚拟并不能解决问题。那么出了什么问题呢?