我有一个内部类myIterator
,我的模板类linearLinkedList<T>
,我想从simpleIterator<T>
覆盖继承的虚方法,但编译器拒绝它们因为&#34;模板可能不是虚拟的。&#34;但是,基于this question,似乎这应该是可能的,因为它只取决于类的类型。例如,我的代码中的方法foo
是合法的。如何实现内部类的虚函数?
template <class T>
class linearLinkedList
{
public:
...
virtual void foo(T data); //OK
simpleIterator<T> * iterator();
private:
...
class myIterator : public simpleIterator<T>
{
public:
myIterator(node<T> ** head);
virtual ~myIterator(); //inherited from simpleIterator; error when implemented
private:
node<T> ** prev;
node<T> ** next;
//functions inherited from simpleIterator<T>:
virtual bool hasNext_impl(); //error when implemented
virtual T next_impl();
virtual void remove_impl();
};
...
template<class T>
virtual linearLinkedList<T>::myIterator::~myIterator() { ... }
->
linearLinkedList.h:213:1: error: templates may not be âvirtualâ
virtual linearLinkedList<T>::myIterator::~myIterator()
答案 0 :(得分:3)
不是函数模板本身的成员函数可以标记为virtual
,即使它是类模板的一部分,但是:
§7.1.2[dcl.fct.spec] / p1:
函数说明符只能在函数声明中使用。
function-specifier: inline virtual explicit
virtual
说明符必须仅用于非静态类成员函数的初始声明;见10.3。
也就是说,您应该从类外定义中删除virtual
关键字:
template<class T>
virtual linearLinkedList<T>::myIterator::~myIterator() { ... }
~~~~~~^ to be removed