typenamed迭代器不是一个类型

Yan*_*ann 0 c++ templates iterator c++11

我正在写一个模板化的类,它涉及使用迭代器.我已经找到了很多关于你如何使用模板来键入迭代器的问题,所以我想知道它为什么还没有用.

#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);
};
Run Code Online (Sandbox Code Playgroud)

我也试过typedef typename std::list<T>::iterator iter;,但是引发错误"std :: list :: iterator不是一个类型"

所以鉴于我正在使用typename,我做错了什么?

我正在使用带有参数-std = c ++ 0x的g ++ 4.4.5,如果它是相关的.

jro*_*rok 8

你想要一个typedef(现在你声明一个名为的对象iter):

typedef typename std::list<T>::iterator iter;
Run Code Online (Sandbox Code Playgroud)

此外,您需要typename在声明中binarySearch:

 iter binarySearch(T toFind, typename std::list<T>::iterator min, typename std::list<T>::iterator max);
Run Code Online (Sandbox Code Playgroud)

当然,你可以iter在这一点上使用:

iter binarySearch(T toFind, iter min, iter max);
Run Code Online (Sandbox Code Playgroud)