通过覆盖虚函数获得 'unresolved external symbol'

Getting 'unresolved external symbol' by overwriting a virtual function

我写了一个简单的界面:(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= 函数。 在另一个 class 中,我从中得出:(Vao.h)

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

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

当我编译代码时,出现 'unresolved external symbol' 错误。 您是否知道为什么(我知道错误消息的含义,但为什么会发生?)或如何以不同的方式实现我的目标?

[编辑]

说清楚。链接器找不到 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)

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

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