gpt4 book ai didi

C++ 继承错误 : ambiguous error

转载 作者:行者123 更新时间:2023-11-27 23:12:31 26 4
gpt4 key购买 nike

在接下来的代码中,在 _tmain(..) 中调用 D::f 时出现不明确的错误因为 B::f 覆盖了 A::f,所以 A::vtable 中指向 f 的指针指向 B::f。

1) 为什么编译器会给出模棱两可的错误?有人可以清除吗?

2) 我试图通过将 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()。要仅继承它一次,所有符合条件的类都必须虚拟继承该方法。

关于C++ 继承错误 : ambiguous error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19175329/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com