[英]typenamed iterator is not a type
我正在编写一个模板类,其中涉及迭代器的使用。 我发现了许多问题,如果您将其与模板一起使用,则需要如何命名迭代器,因此我想知道为什么它仍然无法正常工作。
#pragma once
#include <iterator>
#include <list>
#include <tuple>
template <class T>
class Quack
{
private:
std::list<T> data;
typename std::list<T>::iterator iter;
public:
Quack();
void insert(T dat);
std::tuple<T, T> poppop();
private:
//error: 'iter' does not name a type
iter binarySearch(T toFind, std::list<T>::iterator min, std::list<T>::iterator max);
};
我也尝试过typedef typename std::list<T>::iterator iter;
,但抛出错误“ std :: list :: iterator不是类型”
因此,鉴于我使用的是typename
,我做错了什么?
我正在使用带有参数-std = c ++ 0x的g ++ 4.4.5(如果相关)。
您在那里需要一个typedef(现在您要声明一个名为iter
的对象):
typedef typename std::list<T>::iterator iter;
另外,您需要在binarySearch
的声明中输入typename
:
iter binarySearch(T toFind, typename std::list<T>::iterator min, typename std::list<T>::iterator max);
当然,您可以在此时使用iter
:
iter binarySearch(T toFind, iter min, iter max);
在功能上
iter binarySearch(T toFind, std::list<T>::iterator min, std::list<T>::iterator max);
您将私有数据成员iter指定为函数的返回类型。
这个
typename std::list<T>::iterator iter;
是私有数据成员iter
的定义,其类型类型为typename std::list<T>::iterator
如果您的意思是类型名称而不是数据成员,那么您应该写一个
typedef typename std::list<T>::iterator iter;
要么
using iter = typename std::list<T>::iterator;
同样,最好遵循C ++标准中使用的一般对流并命名为
typedef typename std::list<T>::iterator iterator;
在这种情况下,函数声明看起来像
iterator binarySearch(T toFind, iterator min, iterator max);
同样,当迭代器优先于声明函数时的值时,效果会更好
iterator binarySearch( iterator min, iterator max, T toFind );
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.