具有外部无法解析的C ++虚拟析构函数

时间:2018-07-12 22:11:02

标签: c++ destructor unresolved-external

我有两个班。.

template <class T>
class Node
{
protected:
    Node() = default;
    virtual ~Node() = 0;
    Node(const T& data) noexcept;
    Node(const Node<T> & copy) noexcept;
    Node(Node<T> && copy) noexcept;
    Node<T> & operator=(const Node<T> & rhs) noexcept;
    Node<T> & operator=(Node<T> && rhs) noexcept;
public:
    T & GetData() noexcept;
    T GetData() const noexcept;
    void SetData(const T & data) noexcept;
private:
    T data_;
};


template<class T>
class ListNode : public Node<T>
{
public:
    ListNode() = default;
    ListNode(const T& data, ListNode<T> * next = nullptr, ListNode<T> * previous = nullptr) noexcept;
    ListNode(const ListNode<T> & copy) noexcept;
    ListNode(ListNode<T> && copy) noexcept;
    ~ListNode() override = default;
    ListNode<T> & operator=(const ListNode<T> & rhs) noexcept;
    ListNode<T> & operator=(ListNode<T> && rhs) noexcept;
    ListNode<T> * GetNext() noexcept;
    ListNode<T> * GetPrevious() noexcept;
    void SetNext(ListNode<T> * const next) noexcept;
    void SetPrevious(ListNode<T> * const previous) noexcept;
private:
    ListNode<T> * next_;
    ListNode<T> * previous_;
};

我收到“ 1个未解决的外部问题”错误。根据我以前的经验,这通常意味着虚拟,覆盖或类似问题。我已经弄乱了这段代码,但无法使错误消失。有什么建议吗?

1 个答案:

答案 0 :(得分:4)

派生的析构函数始终在执行结束时隐式调用基本析构函数。您有试图调用抽象函数的代码。您需要为~Node()提供一个定义,该定义的函数体为空:

virtual ~Node() {};