C++ c++;编译错误

C++ c++;编译错误,c++,visual-studio,templates,C++,Visual Studio,Templates,以下代码给出了VisualStudio2009中的编译错误 #include <iterator> #include <vector> template <class T1, class T2 > class A { public: typename std::vector<std::pair<T1,T2> >::iterator iterator; std::pair<iterator, bool >

以下代码给出了VisualStudio2009中的编译错误

#include <iterator>
#include <vector>

template <class T1, class T2 >
class A
{
public:

    typename std::vector<std::pair<T1,T2> >::iterator iterator;
    std::pair<iterator, bool > foo(const std::pair<T1 ,T2> &value_in);
};
#包括
#包括
模板
甲级
{
公众:
typename std::vector::迭代器迭代器;
std::pair foo(const std::pair&value_in);
};
有人能解释一下吗?这里是错误

error C2327: 'A<T1,T2>::iterator' : is not a type name, static, or enumerator
错误C2327:'A::iterator':不是类型名、静态或枚举数

您需要的是typedef,而不是typename

这将
迭代器声明为变量(不是类型):

typename std::vector<std::pair<T1,T2> >::iterator iterator;
typedef typename std::vector<std::pair<T1,T2> >::iterator iterator;
template<class T1, class T2>
struct A {
private:
  // you may or may not want to expose these convenience types
  typedef std::pair<T1, T2> P;
  typedef std::vector<P> V;

public:
  typedef typename V::value_type value_type;
  typedef typename V::iterator iterator;
  std::pair<iterator, bool> foo(value_type const& value_in);
};