root@:~/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;
}