0

Visual Studio 2003次のプログラムをコンパイルして実行するために使用しています。

4 つの割り当て操作があり、そのうち 2 つが正常に実行され、2 つが例外を発生させると予想されます。= operator不適切なクロス キャスト ( AppletoOrangeまたはOrangetoへのキャスト) 中に失敗することが予想される、オーバーロードされた内部の動的キャストがありAppleます。しかし、私の場合、4 つの操作すべてが失敗しています ( Raising exception )。同じコードを実行しましたがVisual Studio 2008、期待どおりに正常に動作しています。しかし、プロジェクト全体を に移動するのVisual Studio 2008は困難です。これは の問題ですVisual Studio 2003か? もしそうなら、これを修正する方法はありますか?

注: クラスFruitは読み取り専用で、変更できません。

class Fruit
{
public:
    virtual void operator = ( const Fruit& fruit )
    {
    }
};

class Apple : public Fruit
{
public:
    virtual void operator = ( const Fruit& fruit )
    {
        Apple& apple = dynamic_cast<Apple&>( fruit );
    }
};

class Mango : public Fruit
{
public:
    virtual void operator = ( const Fruit& fruit )
    {
        Mango& mango = dynamic_cast<Mango&>( fruit );
    }
};

int main( void )
{
    Apple apple;
    Mango mango;
    Fruit* fruit[] = { &apple, &mango };

    *fruit[0] = *fruit[0]; /* Expect to work ok */
    *fruit[0] = *fruit[1]; /* Expect an exception */
    *fruit[1] = *fruit[0]; /* Expect an exception */
    *fruit[1] = *fruit[1]; /* Expect to work ok */
}
4

1 に答える 1

2

Enable Run-time type information (RTTI)プロジェクト設定にチェックインする必要があります。カテゴリ「C++ 言語」。

少なくとも VC6 では、デフォルトでは有効になりません。

于 2009-12-03T03:07:12.830 に答える