نمایش نتایج 1 تا 2 از 2

نام تاپیک: نحوه cast کردن مشتق چندگانه در vC++‎

  1. #1

    نحوه cast کردن مشتق چندگانه در vC++‎

    فرض کنید کلاس پایه A نام دارد. کلاسهای B و C از A مشتق شده اند. حالا کلاس D را از کلاسهای B و C مشتق میکنیم. سوال اینجاست که کلاس B و C به راحتی به نوع A تبدیل میشوند. ولی در قسمتی که باید تبدیل D به A صورت گیرد(در کد زیر بخش مربوط به case 4 ) این پیام خطا صادر میشود:

    error C2594: 'argument' : ambiguous conversions from 'class D' to 'class A &'

    برای رفع این مشکل باید چکار کرد؟ متشکرم.



    switch( f )
    {
    case 1 :
    SetA(i, *new A() );
    break;
    case 2 :
    SetA(i, *new B() );
    break;
    case 3 :
    SetA(i, *new C() );
    break;
    case 4 :
    SetA(i, *new D() );
    break;
    }
    آخرین ویرایش به وسیله radium : دوشنبه 20 خرداد 1387 در 22:54 عصر دلیل: تصحیح خطا

  2. #2

    نقل قول: نحوه cast کردن مشتق چندگانه در vC++‎

    نقل قول نوشته شده توسط radium مشاهده تاپیک
    فرض کنید کلاس پایه A نام دارد. کلاسهای B و C از A مشتق شده اند. حالا کلاس D را از کلاسهای B و C مشتق میکنیم. سوال اینجاست که کلاس B و C به راحتی به نوع A تبدیل میشوند. ولی در قسمتی که باید تبدیل D به A صورت گیرد(در کد زیر بخش مربوط به case 4 ) این پیام خطا صادر میشود:

    error C2594: 'argument' : ambiguous conversions from 'class D' to 'class A &'
    برای رفع این مشکل باید چکار کرد؟ متشکرم.



    switch( f )
    {
    case 1 :
    SetA(i, *new A() );
    break;
    case 2 :
    SetA(i, *new B() );
    break;
    case 3 :
    SetA(i, *new C() );
    break;
    case 4 :
    SetA(i, *new D() );
    break;
    }

    سلام.
    d* رو به C* یا B* باید CAST کنید، یعنی جای *new D() بزنید:

    *((C*)(new D()))


    البته تا جاییکه براتون امکان داره از multiple inheritance ها دوری کنید، اگر چه در برخی شرایط بسیار کارامد هستن. اما در زبونهایی مثل C#‎ و Java چنین امکانی وجود نداره.

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •