Не является нестатическим членом данных или базовым классом

0

У меня есть следующие классы, и я пытаюсь получить доступ к базовому члену, используя объект класса H, и я получаю предупреждение H :: a.

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

Я попытался сделать элемент данных статичным, но потом он не позволяет инициализировать его в базовом конструкторе. Какое решение этих двух проблем?

  • 0
    Это C ++? Вы должны добавить тег c ++, если он есть.
  • 0
    Да, это спасибо. Я продолжаю забывать это.
Показать ещё 1 комментарий
Теги:
class

1 ответ

3

Класс "H" имеет две переменные, называемые "a", одну из F и одну из G. Вы можете либо использовать классификатор,

H::a

или вы можете использовать "виртуальный" спецификатор наследования (см. qaru.site/questions/122850/...)

#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

  • 0
    В коде ОП они не являются функциями; они являются членами переменных.
  • 0
    Да, я собирался продемонстрировать оба и стал ленивым - изменил их на переменные просто чтобы соответствовать его посту.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню