[英]Sorted Linked List in C++
這是我的問題。
我有一個Linked List類,如下所示:
#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
因為它更容易閱讀。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.