【发布时间】:2012-04-18 23:14:27
【问题描述】:
我有一个基类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()`
将析构函数设为纯虚拟并不能解决问题。 那么到底出了什么问题呢?
【问题讨论】:
-
你为什么首先想要一个纯虚拟构造函数?一个空的虚拟构造函数工作得很好(它相当于相同数量的非空白字符)
-
@LuchianGrigore 这不是我的意思。我为您改写一下:为什么您希望 Media 类是抽象的?
-
@drhirsch 通常是因为您想禁止创建它。也许 Media 类型的对象没有意义。
-
如果有人只需要禁用“类具有虚函数但非虚析构函数”警告,那就是
-Wno-non-virtual-dtor。不过,我并不建议将其作为这个问题的答案。
标签: c++