得到一些错误,它是一个非虚拟析构函数的虚函数。我该如何解决这个错误?它在g ++ 4.6.x中工作,但我需要它来处理旧版本的g ++。 :(
#include <list>
template <typename T>
class container{
public:
~queue(){
queuel.clear();
queuel.~list();
}
virtual T func_x(){
T temp;
//do stuff with list<t> test
return temp;
}
private:
std::list<T> test;
};
template <typename T>
class container2 : public container<T>{
public:
virtual T func_x(){
T temp;
//do different stuff with list<T> test
return temp;
}
};
答案 0 :(得分:4)
编辑:@Als有一个点,析构函数也错误地命名为您的类。更新了答案。
问题在于g ++认为既然你在类中有虚方法,你应该有一个虚析构函数。这与你有关,如果你继承一个类并扩展它,你可以分配基类析构函数不知道清理的内存或其他资源,如果你的析构函数不是虚函数,可以调用基类的析构函数在某些情况下,而不是你真正的析构函数。
经验法则是,如果您的类中有虚拟方法,请使用虚拟析构函数。删除错误命名的析构函数〜队列并放入
virtual ~container();
你的类声明中的和强制.cpp文件中的析构函数应该可以解决你的问题。