首页 > 解决方案 > 通过覆盖虚函数获取“未解析的外部符号”

问题描述

我写了一个简单的界面:(ICopyOnOperator.h)

template<typename T>
class ICopyOnOperator {

    public:
        virtual const T& operator=(const T& other) = 0;

        ICopyOnOperator() = default;

        ICopyOnOperator(const ICopyOnOperator& other) {
            this->operator=((const T&)other);
        }
};

它应该在调用operator=复制构造函数时自动调用该函数。在我从中派生的另一个类中:(Vao.h)

class Vao : public ICopyOnOperator<Vao> {
   ...

   public:
        virtual const Vao& operator=(const Vao& other) override {
            return *this;
        }
};

当我编译我的代码时,我得到了“未解析的外部符号”错误。您知道为什么(我知道错误消息的含义,但为什么会发生?)或如何以不同的方式实现我的目标?

[编辑]

说清楚。链接器找不到该ICopyOnOperator<class Vao>::operator=(class rhino::Vao const &)方法。完整的错误信息:

1>tester.obj : 错误 LNK2019: 无法解析的外部符号“public: virtual class rhino::Vao const & __thiscall rhino::ICopyOnOperator::operator=(class rhino::Vao const &)” (??4?$ICopyOnOperator@ VVao@rhino@@@rhino@@UAEABVVao@1@ABV21@@Z) 在函数 "public: __thiscall rhino::ICopyOnOperator::ICopyOnOperator(class rhino::ICopyOnOperator const &)" (??0?$ICopyOnOperator@ VVao@rhino@@@rhino@@QAE@ABV01@@Z)

标签: c++unresolved-external

解决方案


operator=这与您从构造函数中调用虚方法 () 的事实有关。从构造函数调用虚方法会导致调用在该层次结构级别定义的方法,而不是在被实例化的类中定义的方法。

在此处查看已接受的答案:在构造函数中调用虚函数


推荐阅读