下面的代码给出了错误:
error: type ‘std::list<T,std::allocator<_Tp1> >’ is not derived from type ‘Foo<T>’
error: expected ‘;’ before ‘iter’
#include <list>
template <class T> class Foo
{
public:
std::list<T>::iterator iter;
private:
std::list<T> elements;
};
为什么以及这应该是正确的?
答案 0 :(得分:7)
您需要typename std::list<T>::iterator
。这是因为list
依赖于模板参数,因此编译器无法知道其中的名称iterator
究竟是什么(从技术上讲,它可以知道,但C ++标准不起作用)那样)。关键字typename
告诉编译器后面的内容是类型的名称。
答案 1 :(得分:3)
您需要一个类型名称
template <class T> class Foo {
public:
typename std::list<T>::iterator iter;
private:
std::list<T> elements;
};