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