4
我有一個內部類myIterator
,我的模板類linearLinkedList<T>
,我想從simpleIterator<T>
覆蓋繼承的虛擬方法,但編譯器拒絕它們爲「模板可能不是虛擬的」。不過,根據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()
不要把'virtual'關鍵字外的類的定義 –
你必須不要在類定義之外使用virtual關鍵字。 – MikeMB
@PiotrSkotnicki哦,傻我。想要做出答案,以便我可以接受它? – Vitruvius