C++ 使用std::initializer\u列表的泛型类型用法
我无法理解为什么g++总是抱怨iter vector.cpp:42:8:错误:“std::initializer\u list::iterator”之前需要“typename” 代码如下:C++ 使用std::initializer\u列表的泛型类型用法,c++,C++,我无法理解为什么g++总是抱怨iter vector.cpp:42:8:错误:“std::initializer\u list::iterator”之前需要“typename” 代码如下: template<typename T> Vector<T>& Vector<T>::operator=(std::initializer_list<T> list) { if ( list.size() > 0 ) {
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;
}
模板
向量和向量::运算符=(标准::初始值设定项\u列表)
{
如果(list.size()>0)
{
清除();
for(std::initializer_list::iterator iter=list.begin();
iter!=list.end();iter++)
{
推回(*iter);
}
}
归还*这个;
}
您需要向编译器指出,
std::initializer\u list::iterator
是一个类型,因为它也可以是一个成员。由于编译器在此函数中不知道T
,这两种可能性都会导致歧义。它必须是typename std::initializer\u list::iterator
,因为编译器无法分辨迭代器是成员还是类型。的确,您的权利!谢谢你的回答确实正确,非常感谢!当然,考虑到初始值设定项\u list
是C++11的一个特性,您还应该能够使用for range循环,或者至少使用auto
声明iter
。