如何创建指向模板类的指针,c ++

时间:2016-04-05 12:06:03

标签: c++ visual-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类中的所有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;
};

1 个答案:

答案 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(){}