C2248 - От до 2 наследств

У меня есть 3 класса, 1 унаследован другим. А->Б->С. У A есть защищенная функция-член, которую я пытаюсь установить с помощью C.

Я получаю C2248 - Ошибка C2248 «A :: status»: невозможно получить доступ к недоступному члену, объявленному в ассоциациях класса «A»

Мне не разрешен доступ к переменной в классе C?

 class A {
 public:
     A();
     ~A();
 protected:
     char status[4];
 };

 class B: class A {
 public:
     B();
     ~B();
 };

 class C: class B {
 public:
     C(char newStatus[4]);
 };
 C::C(char newStatus[4])
 {
     this.status = newStatus;
 }

person S. Gu    schedule 13.06.2018    source источник


Ответы (1)


Стратегия наследования по умолчанию — частная. Это означает, что status превратится в частный член в B и будет недоступен в C, см. Разницу между частным, общедоступным и защищенным наследованием для получения дополнительной информации. Следовательно, вы хотите наследовать публично. Также массивы не поддерживают присваивание, вместо этого используйте std::array.

#include <array>

class A {
public:
    A();
    ~A();

protected:
    std::array<char,4> status;
};

class B : public A {
public:
    B();
    ~B();
};

class C : public B {
public:
    C(std::array<char,4> const &newStatus);
};
C::C(std::array<char,4> const &newStatus) {
    this->status = newStatus;
}
person Henri Menke    schedule 13.06.2018