我写了一个简单的界面:(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)
答案 0 :(得分:0)
这与您在构造函数中调用虚方法(operator=
)的事实有关。从构造函数调用虚方法会导致调用在该层次结构级别定义的方法,而不是在实例化的类中定义的方法。
请在此处查看已接受的答案:Calling virtual functions inside constructors