这是我的问题。
我有一个链表类,如下所示:
#include <iostream>
#include "List.h"
template <class Elem>
class LList : public List<Elem> { //List is a virtual base class
protected:
Node <Elem> *head;
Node <Elem> *fence;
Node <Elem> *tail;
int leftCount;
int rightCount;
void init();
void removeAll();
public:
LList();
~LList();
//Rest of methods overridden from List class
//////
};
然后我有一个名为 SortedLList 的类,它继承自 LList,如下所示:
#include "LinkedList.h"
#include "Helper.h"
template <class Elem>
class SortedLList : public LList<Elem> {
protected:
Helper *helper;
public:
SortedLList();
~SortedLList();
bool insert(const Elem&); //Override insertion method from LList class
};
在 SortedLList (SortledLList.cpp) 的实现中:
#include "SortedLList.h"
template <class Elem>
SortedLList<Elem>::~SortedLList() {
removeAll();
}
template <class Elem>
bool SortedLList<Elem>::insert(const Elem &_e) {
fence = head;
//Rest of Code..
}
我有一个编译器错误,说:使用未声明的标识符 removeAll()。栅栏和头部指针也没有被识别。我做错了什么?
谢谢。
由于您的类是一个模板,因此某些问题可能会使编译器感到困惑。您可能认为您的代码简单明了且易于理解,在这种情况下确实如此。较旧的编译器过去常常尽力猜测和编译此代码。
但是,较新的编译器更严格,并且在此类代码的所有版本上都失败,以防止程序员依赖它。
您需要做的是在调用基类函数时使用this
指针。这使得这一呼吁明确而明确。那看起来像this->removeAll()
.
另一种选择是使用全名限定,例如 LList<Elem>::removeAll()
.我更喜欢使用this
,因为它更容易阅读。