多重继承转换二义性

    技术2022-06-23  93

    如果一个类继承多个基类,而且这些基础继承相同的基类,则进行类型转换时,如果转换成相同的父类型,编译时会产生二义性错误:

     class A {   virtual void test(){} ; } ; class B : public A {} ; class C : public A {} ; class D: public B, public C {} ;

     D *pa = new D() ; A *pb = (A*)(pa) ;

    以上代码编译时产生以下错误提示:

     error C2594: 'type cast' : ambiguous conversions from 'D *' to 'A *'

    即不支持将D*指针类型强制转换成A*类型,需要选择一个更为精确的类型进行转换,如

     A *pb = (B*)(pa) ;

    A *pb = (C*)(pa) ;

    两种转换都合法,但一般使用最左边的基类,大多数编译器产生的代码效率会高一些。

     

    本文来自博客,转载请标明出处:http://blog.csdn.net/XieKe_cs01/archive/2010/08/31/5853921.aspx


    最新回复(0)