歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> expected `; before ‘iter’

expected `; before ‘iter’

日期:2017/3/1 10:03:42   编辑:Linux編程

gcc版本:

[email protected]:~/workspace/c++# gcc --version
gcc (Ubuntu 4.3.3-5ubuntu4) 4.3.3

代碼如下:

template <typename elemType>
void display(const vector<elemType> &vec, ostream &os)
{
vector<elemType>::const_iterator iter=vec.begin();
vector<elemType>::const_iterator end_it=vec.end();

for( ; iter != end_it; ++iter)
os << *iter << ' ';
os << endl;
}

錯誤如下:

test.cpp: In function ‘void display(const std::vector<elemType, std::allocator<_CharT> >&,std::ostream&)’:
test.cpp:9: 錯誤: expected `;' before ‘iter’
test.cpp:10: 錯誤: expected `;' before ‘end_it’
test.cpp:12: 錯誤: ‘iter’在此作用域中尚未聲明
test.cpp:12: 錯誤: ‘end_it’在此作用域中尚未聲明

這是因為C++標准的規定,引用模板類型內部的type必須顯示告訴編譯器這是個type( iterator)而不是variable.默認情況下認為模板內部的成員為變量。
在GCC編譯器中認為vector<elemType>::const_iterator 不是一個type,
在VC或Intel Compiler中不會出現這樣的問題。
因此改為:

代碼:

void display(const vector<elemType> &vec, ostream &os)
{
typename vector<elemType>::const_iterator iter=vec.begin();
typename vector<elemType>::const_iterator end_it=vec.end();

for( ; iter != end_it; ++iter)
os << *iter << ' ';
os << endl;
}

Copyright © Linux教程網 All Rights Reserved