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