C++ 继承错误:不明确的错误
C++ Inheritance Error : ambiguous error
在下一个代码中,在 _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 {
究其原因,钻石传承含糊不清。 struct D
正在从A1
和B
中获取方法f()
。若要仅继承一次,所有符合条件的类都必须虚拟继承该方法。
相关文章:
- C++ 编译器错误:P1LinkedList.cpp:145:错误:重载的"to_string(int&)"调用不明确
- gcc出现不明确的模板实例化错误
- "byte":使用Crypto++和Windows SDK时出现不明确的符号错误
- 使用 std::iterator_traits<> 时编译时错误不明确
- 在类Bat代码中,这给了我错误:重载的"Bat()"的调用是不明确的Bat(;)
- 错误错误 C2872:"布尔值":kinect.h 的不明确符号
- C++打印模板容器错误(错误:"运算符<<"的不明确重载)理解?
- 错误:使用复制和交换习惯用法的交换函数中"operator="的重载不明确
- 不明确的错误重载运算符<<QdataStream 子类和个人类
- 模板上下文中的"不明确的基类"错误
- C++ 模板不明确错误
- 为什么调用不明确的 ctor 时没有编译时错误?
- G++ 错误:重载的"abs(无符号 int)"的调用不明确
- 提升错误:"运算符=="的重载不明确
- Qt 中的错误不明确
- C++ 继承错误:不明确的错误
- 超类运算符()错误-不明确
- 符号错误不明确
- 构造函数中的分段错误不明确
- 错误:不明确的默认类型转换(c++)