我有以下类,我正在尝试使用类 H 的对象访问基成员,但我收到 H::a is ambiguous 警告。
class E {
public:
E() : a(11) { }
int a;
};
class F : public E {
public:
F() : b(22) { }
int b;
};
class G : public E {
public:
G() : c(33) { }
int c;
};
class H: public F, public G {
public:
H() : d(44) { }
int d;
};
我尝试使数据成员成为静态的,但它不允许我在基本构造函数中对其进行初始化。这两个问题的解决方案是什么?
最佳答案
类“H”有两个名为“a”的变量,一个派生自 F,一个派生自 G。您可以使用限定符,
H::a
或者您可以使用“虚拟”继承说明符(参见 https://stackoverflow.com/a/419999/257645)
#include <iostream>
struct A {
int a;
};
struct B : virtual public A {
};
struct C : virtual public A {
};
struct D : virtual public B, virtual public C {
void d1() { a = 1; }
void d2() { a = 2; }
};
int main() {
D d;
d.d1();
d.d2();
std::cout << d.a << std::endl;
}
关于c++ - 不是非静态数据成员或基类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19720924/