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

C++ Virtual Destructor with Unresolved externals

我有两个类..

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 个未解决的外部”错误。根据我以前的经验,这通常意味着虚拟、覆盖或类似的东西有问题。我弄乱了这段代码,但无法使错误消失。有什么建议吗?

派生析构函数总是在执行结束时隐式调用基析构函数。您有试图调用抽象函数的代码。您需要给 ~Node() 一个空函数体的定义:

virtual ~Node() {};