簡體   English   中英

如何創建指向模板類的指針,C ++

[英]How to create a pointer to a template class, c++

我正在使用鏈接列表進行排隊。 鏈表是兩個類和一個結構,IList是抽象類,List繼承自IList。 似乎沒有奇怪的錯誤,我無法從隊列中訪問List類。

template <typename T>
class IList{
public:
    virtual ~IList();
    virtual void add(const T& element) = 0;

    //all functions here are pure virtual
};



template <typename T>
class List : public IList<T>{
private:

    struct Node{
        T data;
        Node* next; 
    };

Node* current;
int nrOfElements;

public:
    List();
    ~List();
    List(const List& origObj);
    void operator=(const List& origObj);
    virtual void add(const T& element);
};


//class definition

我的List類中的所有函數都可以正常工作,但是當我嘗試從queue.h訪問它時,出現兩個錯誤

錯誤1錯誤LNK2019:未解析的外部符號“公共:虛擬__thiscall IList ::〜IList(void)”(?? 1?$ IList @ H @@ UAE @ XZ)在函數__unwindfunclet $ ?? 0?$$ @@ H中引用@@ QAE @ ABV0 @@ Z $ 0

錯誤2錯誤LNK1120:1個未解決的外部

隊列繼承自IQueue,IQueue是一個抽象類

template <typename T>
class Queue : public IQueue<T>{

private:
    List<T>* aList; //I can't access List via aList->

public:
    Queue();
    Queue(const Queue& origObj);
    void operator=(const Queue& origObj);
    virtual ~Queue();
    virtual void enqueue(const T& element);
    virtual T dequeue() const throw(...);
    virtual T& front() throw(...);
    virtual bool isEmpty() const;
};

即使是純析構函數,虛擬析構函數也必須具有實現。 了解為什么純虛擬析構函數需要實現,所以,您必須做

template <typename T>
class IList{
public:
    virtual ~IList();
    virtual void add(const T& element) = default;

    //all functions here are pure virtual
};

要么

template <typename T>
class IList{
public:
    virtual ~IList();
    virtual void add(const T& element) = 0;

    //all functions here are pure virtual
};

template <typename T>
IList<T>::~IList(){}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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