Ошибка при доступе к функции-члену базового класса
Есть два шаблона классов: базовый и потомок. В потомке вызывается функция базового:
template<typename Tp>
class Base
{
protected:
void base_proc()
{ return; }
};
template<typename Tp>
class Derived : protected Base<Tp>
{
public:
void derived_proc()
{
base_proc();
}
};
int main()
{
Derived<int> id;
id.derived_proc();
}
Компилятор выдает такую ошибку:
error: there are no arguments to ‘base_proc’ that depend on a template parameter, so a declaration of ‘base_proc’ must be available [-fpermissive]
в чем может быть проблема?
Ответы (1 шт):
Автор решения: KoD
→ Ссылка
Дело в том, что при разрешении имени base_proc() в теле derived_proc(), она никогда не рассматривается как член Базового класса. Как правило, компилятор считает ее как глобально определенную функцию void base_proc(). В данном случае для решения проблемы следует полностью квалифицировать имена членов базовых классов Base::base_proc(), или использовать конструкцию this->
void derived_proc()
{
Base<Tp>::base_proc();
}
или так:
void derived_proc()
{
this->base_proc();
}