我正在制作一个包含链表的队列。链表是两个类和一个结构,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类中的所有funktions工作正常,但当我尝试从queue.h访问它时,我得到两个错误
错误1错误LNK2019:未解析的外部符号&#34; public:virtual __thiscall IList :: ~IList(void)&#34; (?1?$ IList @ H @@ UAE @ XZ)函数__unwindfunclet $ ?? 0?$ List @ 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;
};
答案 0 :(得分:1)
虚拟析构函数必须具有实现,即使它是纯粹的。请参阅Why a pure virtual destructor needs an implementation所以,你必须这样做
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(){}