簡體   English   中英

C ++中的排序鏈表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM