我有一个基类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会给我一堆警告信息,但程序仍能编译通过并正常工作。现在我想摆脱这些烦人的警告信息,因此我加了一个虚析构函数来满足编译器,结果是:程序不能编译,并出现以下错误:
undefined reference to `Media::~Media()`
把析构函数声明为纯虚函数并不能解决这个问题。 那么出了什么问题?
-Wno-non-virtual-dtor
。不过我并不建议将其作为这个问题的答案。 - Raptor007