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