مشكلة مع الصليب الصليب في Visual Studio 2003
-
11-09-2019 - |
سؤال
انا استخدم Visual Studio 2003
لتجميع وتشغيل البرنامج التالي.
هناك 4 عملية مهمة حيث أتوقع 2 منها تشغيل موافق و 2 منها لرفع الاستثناء. هناك صب ديناميكي داخل الزائد = operator
الذي يتوقع أن تفشل خلال الصب الصليب غير المناسب (صب من Apple
ل Orange
أو Orange
ل Apple
). ولكن في حالتي، تفشل جميع العمليات الأربعة (زيادة الاستثناء). لقد قمت بتشغيل نفس الكود في 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