【发布时间】:2015-08-23 19:17:26
【问题描述】:
这个问题已经有了答案here除了,因为我读了这个问题但仍然无法弄清楚哪里出了问题。编辑:不,这个错误的原因并不不同。
我正在尝试这样做:
template<typename T>
class base
{
protected:
base() {}
virtual ~base() {}
virtual void method(void* const voidp) const = 0;
};
template<typename T>
class child : public base<T> // ERROR: child is not a template type
{
public:
child(std::vector<T> arg)
: _arg{arg}
{
}
virtual ~child() {}
void method(void* const voidp) const
{
for(template std::vector<T>::const_iterator it = _arg.begin(); it != _arg.end(); ++ it)
{
method2(voidp, *it);
}
}
protected:
std::vector<T> _arg;
};
我有点困惑,因为这似乎与链接的示例相同,除非我弄错了?
编辑:这是method2
void method2(void* const voidp, const double& arg) // second argument comes in both double and float formats
{
}
// so there is also a: void method2(void* const voidp, const float& arg)
【问题讨论】:
-
std::vector<T>::iterator应该是typename std::vector<T>::const_iterator,而里面的method(voidp, *it);调用是错误的——没有这个函数 -
@PiotrSkotnicki 抱歉,这是个错误,让我改一下。我的最小示例的问题是我把它搞砸了,只给了你一半。
-
类
child的构造函数有一个sintax错误:_arg{arg}应该是_arg(arg)。 -
@enzom83 没有语法错误 - 这是 C++ 11
标签: c++ oop templates c++11 inheritance