Visual Studio 2003中交叉转换的问题

时间:2009-12-03 02:55:52

标签: c++ exception visual-studio-2003

我正在使用Visual Studio 2003编译并运行以下程序。

有4个赋值操作,我希望其中2个运行正常,其中2个引发异常。在重载= operator内部存在动态强制转换,期望在非正确的交叉投射期间失败(从Apple转换为OrangeOrangeApple)。但在我的情况下,所有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 */
}

1 个答案:

答案 0 :(得分:2)

您需要在“项目设置”中查看Enable Run-time type information (RTTI)。 类别“C ++语言”。

在VC6中,至少默认情况下不会启用它。