您的位置:首页 > 其它

expected `;' before ‘iter’ 标签: iterator编译器compilerubuntuosgcc 2010-12-08 20:13 1927人阅读 评论(0) 收藏 举报

2017-06-06 10:51 1211 查看
 


expected `;' before ‘iter’

标签: iterator编译器compilerubuntuosgcc
2010-12-08 20:13 1927人阅读 评论(0) 收藏 举报

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)

{

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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐