c++ - 通过覆盖虚函数获取“未解析的外部符号”
问题描述
我写了一个简单的界面:(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)
解决方案
operator=
这与您从构造函数中调用虚方法 () 的事实有关。从构造函数调用虚方法会导致调用在该层次结构级别定义的方法,而不是在被实例化的类中定义的方法。
在此处查看已接受的答案:在构造函数中调用虚函数
推荐阅读
- python-3.x - 用python3中的正则表达式匹配句子中的变体名称字符串
- azure - Azure ARM 模板 - 如何引用更改的资源参数
- c# - AddDelegate addDelegate = new AddDelegate(Add); 有什么区别?和 AddDelegate addDelegate = 添加;
- android - 单元测试列表扩展功能 - Kotlin
- python - python3单列数据框比较
- java - 使用Java运行脚本移动光标
- javascript - 为什么 react-router-dom 中的 Link 组件不接受 className 道具?
- solidity - 如何在没有参数的情况下使用 abi.encodeWithSignature 调用外部合约?
- python - 我有一个包含两列的 Csv 文件。我想将此 DataFrame 转换为 JSON。我希望第一列元素作为键,第二列元素作为值
- angular - ng2-chart:条形图中的最小值不可见