通过覆盖虚函数获得 '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
我写了一个简单的界面:(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