0

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

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;
}

亲切的问候

4

2 回答 2

1

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

于 2013-09-03T12:53:08.810 回答
1

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

于 2013-09-03T12:53:21.193 回答