std :: initializer_list的泛型类型用法

时间:2013-09-03 12:51:46

标签: c++

我无法理解为什么g ++一直抱怨它?

vector.cpp:42:8:错误:“std :: initializer_list< _Tp> :: iterator

之前需要”typename“

这是代码:

template<typename T>
Vector<T>& Vector<T>::operator=(std::initializer_list<T> list)
{
   if ( list.size() > 0 )
   {
       clear();

       for( std::initializer_list<T>::iterator iter = list.begin();
            iter != list.end(); iter++ ) 
       {
           push_back(*iter);
       }
   }

   return *this;
}

亲切的问候

2 个答案:

答案 0 :(得分:1)

您需要向编译器指出std::initializer_list<T>::iterator是一种类型,因为它也可以是成员。由于编译器在此函数中不知道T,因此两种可能性都会导致含糊不清。

答案 1 :(得分:1)

IT必须是typename std::initializer_list<T>::iterator,因为编译器无法判断迭代器是成员还是类型。