Не удается получить доступ к членам базового класса Template в производном классе шаблона

У меня есть шаблон базового класса.

template<class KeyF>
class Base 
{
  private:
   int member1;
   char member2;
   ....
};

Я получил другой класс из вышеупомянутого класса.

template<class KeyF>
class Derived : public Base<KeyF>
{
  public:
  void func1() {
    <accessing member1/member2>
  }

  ....
};

Выше код не компилируется в GCC. говоря, что member1 не является членом Derived. Но он уже получен из базового класса, тогда почему он не может получить доступ к своему члену?

3 ответа

Вам необходимо добавить префикс базовых имен членов this-> или же Base<KeyF>::или добавить using объявление в классе, чтобы показать их. Их имена являются зависимыми именами, и они скрыты.

Члены в Base являются private, Вы не можете получить доступ private members класса, за пределами этого класса (кроме friend). Сделать их protectedили сделать protected getters,

Ты пробовал защищать? Прошло немного, так как я был глубоко в C++...

Я думаю, что для решения проблемы потребовалось два изменения:

  1. В базовом классе определите член как "защищенный", а не "частный", чтобы он был доступен в производном классе.

  2. В производном классе добавьте имя базового класса перед защищенным членом. В этом случае он должен выглядеть как "Base:: member1".

В моем случае с использованием стандарта C++17 проблема была решена. Надеюсь, это будет полезно. Спасибо Kerrek SB за информацию.

Другие вопросы по тегам