• 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

C++继承错误:模棱两可的错误

c/c++ 来源:Hesham Yassin 3次浏览

在下一个代码中,在_tmain(..) 中调用D :: f时出现模糊错误,因为B :: f覆盖A :: f,指向f中的指针A :: vtable指向B :: f。C++继承错误:模棱两可的错误

1)为什么编译器会给出模糊的错误?有人可以请清楚吗?我试图通过将B :: f(int)更改为B :: f(char)来重载A :: f(int),但错误没有消失!这是为什么?

的继承图:

............A...... 
........../.|.\.... 
........A1..B..C... 
..........\.|./.... 
............D...... 

代码:

struct A { 

virtual void f(int x) {cout << "A::f";}; 
virtual void g(int x) {cout << "A::g";}; 
private: int n; 
}; 
struct A1: A { 
virtual void h(int x) {f(x);}; 
}; 
struct B : virtual A { 
void f(int x) {cout << "B::f";}; 
}; 
struct C : virtual A { 
void g(int x) {cout << "C::g";}; 
}; 
struct D : A1, B , C { 

}; 
int _tmain(int argc, _TCHAR* argv[]) 
{ 
    D* d = new D(); 
    d->f(1); 
    return 0; 
} 


===========解决方案如下:

你需要改变你的产业定义struct A1

struct A1: virtual A { 

究其原因,diamond inheritance ambiguity。 struct DA1B获得方法f()。要只继承一次,所有符合条件的类都必须虚拟地继承该方法。


版权声明:本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。
喜欢 (0)