我正在使用Visual Studio 2003
编译并运行以下程序。
有4个赋值操作,我希望其中2个运行正常,其中2个引发异常。在重载= 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 */
}
答案 0 :(得分:2)
您需要在“项目设置”中查看Enable Run-time type information (RTTI)
。
类别“C ++语言”。
在VC6中,至少默认情况下不会启用它。