gcc STL iterator 出現錯誤 expected `;' before ‘iter’

gcc版本:

root@sunshine-laptop:~/workspace/c++# gcc --version
gcc (Ubuntu 4.3.3-5ubuntu4) 4.3.3

代碼如下:

template <typename elemType>
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;
}

錯誤如下:

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章