Не удается получить доступ к членам базового класса 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++...
Я думаю, что для решения проблемы потребовалось два изменения:
В базовом классе определите член как "защищенный", а не "частный", чтобы он был доступен в производном классе.
В производном классе добавьте имя базового класса перед защищенным членом. В этом случае он должен выглядеть как "Base
:: member1".
В моем случае с использованием стандарта C++17 проблема была решена. Надеюсь, это будет полезно. Спасибо Kerrek SB за информацию.