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

У меня 3 класса, один унаследован другим. А-> В-> С. 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;
 }

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;
}
Другие вопросы по тегам