Visual Studioの2003年のクロスキャスト通報
-
11-09-2019 - |
質問
私はコンパイルして、次のプログラムを実行するために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で、少なくともそれはデフォルトでは有効になりません。
所属していません StackOverflow