好吧,也许我太累了,无法思考这个问题的解决方案,我在互联网上看了很多类似的问题,但没有找到。所以这是我可怕的代码:
class X
{
public:
virtual const X& operator =( const X& ) = 0;
};
class Y : public X
{
public:
virtual const X& operator =( const X& x )
{
return *this;
}
};
class Z : public Y
{
};
int main_08(int argc, char* argv[])
{
Z z1;
Z z2;
z1 = z2;
return 0;
}
根据我的预期,代码应该可以正常运行,因为由于类 Z 的赋值没有被覆盖,它应该指向定义的 Y 的赋值运算符。所以在写“z1 = z2”时,应该调用其基类的赋值运算符。当我注释掉这一行时,代码运行良好
相反,我得到 LNK2019 说:
错误 LNK2019:未解析的外部符号“public: virtual class X const & __thiscall X::operator=(class X const &)”(??4X@@UAEABV0@ABV0@@Z) 在函数“public: class Y & __thiscall”中引用Y::operator=(class Y const &)" (??4Y@@QAEAAV0@ABV0@@Z)
我很困惑,想不通虚函数路由机制是如何让我调用 X::operator =( const X& ) 的。有什么想法吗?