3

わかりました、多分私は疲れすぎてこの問題の解決策を考えることができません。インターネットで同様の問題についてよく調べましたが、見つかりませんでした。だからここに私のひどいコードがあります:

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& ) を呼び出すようになったのか理解できません。何かご意見は?

4

2 に答える 2