質問

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

私は例外を発生させるためにそれらの2には、[OK]を実行することを期待し、それらの2 4割付操作があります。非適切なクロスキャスト(= operatorするAppleするOrangeまたはOrangeからキャスト)中に失敗することを期待過負荷にApple内部の動的なキャストがあります。しかし、私の場合、すべての4つの操作は、(例外を上げる)失敗しています。私は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 */
}
役に立ちましたか?

解決

あなたは、プロジェクト設定でEnable Run-time type information (RTTI)をチェックする必要があります。 カテゴリー "C ++言語" ます。

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top