1

我有以下类,我正在尝试使用 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;
};

我尝试将数据成员设为静态,但它不允许我在基本构造函数中对其进行初始化。有什么办法可以解决这两个问题?

4

1 回答 1

3

类“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;
}

http://ideone.com/p3LPe0

于 2013-11-01T04:56:54.247 回答