通过覆盖虚函数获得“未解析的外部符号”

时间:2018-04-26 17:48:27

标签: c++ unresolved-external

我写了一个简单的界面:(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&gt; tester.obj:错误LNK2019:未解析的外部符号“public:virtual class rhino :: Vao const&amp; __thiscall rhino :: ICopyOnOperator :: operator =(class rhino :: Vao const&amp;)”(?? 4?$ ICopyOnOperator @VVao @ rhino @@@ rhino @@ UAEABVVao @ 1 @ ABV21 @@ Z)在函数“public:__thiscall rhino :: ICopyOnOperator :: ICopyOnOperator(class rhino :: ICopyOnOperator const&amp;)”中引用(? ?0?$ ICopyOnOperator @ VVao @犀牛@@@犀牛@@ @ QAE @@ ABV01 Z)

1 个答案:

答案 0 :(得分:0)

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

请在此处查看已接受的答案:Calling virtual functions inside constructors