Вот пример кода, который воспроизводит мою проблему:
template <typename myType>
class Base {
public:
Base() {}
virtual ~Base() {}
protected:
int myOption;
virtual void set() = 0;
};
template <typename InterfaceType>
class ChildClass : public Base < std::vector<InterfaceType> >
{
public:
ChildClass() {}
virtual ~ChildClass() {}
protected:
virtual void set();
};
template <typename InterfaceType>
void ChildClass<InterfaceType>::set()
{
myOption = 10;
}
Мое использование в main()
:
ChildClass<int> myObject;
Я получаю следующую ошибку (gcc 4.4.3 на ubuntu):
'myOption не был объявлен в этой области
Если мой ChildClass будет без нового параметра шаблона, это будет работать нормально, т.е.:
class ChildClass : public Base < std::vector<SomeConcreteType> >
Изменить
Мне удалось его решить, если мой метод набора выглядит так:
Base<std::vector<InterfaceType> >::myOption = 10;
Он отлично работает. Тем не менее, хотя и не уверен, почему мне нужно указать все параметры шаблона.