【发布时间】:2011-10-27 22:01:10
【问题描述】:
这是重现我的问题的代码示例:
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;
我收到以下错误(ubuntu 上的 gcc 4.4.3):
‘myOption’没有在这个范围内声明
如果我的 ChildClass 没有新的模板参数,这将正常工作,即:
class ChildClass : public Base < std::vector<SomeConcreteType> >
编辑
如果我的 set 方法如下所示,我已经设法解决了:
Base<std::vector<InterfaceType> >::myOption = 10;
它工作正常。仍然不知道为什么我需要指定所有模板参数。
【问题讨论】:
-
myOption是一个从属名称,它将与this->一起使用
标签: c++ templates inheritance g++ compiler-errors