c++ - 不是非静态数据成员或基类

标签 c++ class

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

http://ideone.com/p3LPe0

关于c++ - 不是非静态数据成员或基类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19720924/

相关文章:

c++ - C++ 中的十进制到二进制转换年份

Javascript 在 <span> 元素中获取文本

java - 删除java中的类对象

Java:对象中的数组属性

c++ - 从 QTableWidget 序列化时 CSV 文件中不需要的字符

c++ - 为什么我在递归删除目录时遇到问题?

c++ - 这行代码在 C++ 类中是什么意思?

html - 如何在 wordpress 中的另一个悬停动画期间创建悬停动画?

c++ - 为什么功能tellg()没有返回好的结果?

c++ - 如何使用 Node C++ 插件部署动态库?