迭代器作为参数的问题

stelongleung 2011-09-08 02:29:55
直接上代码:


int _tmain(int argc, _TCHAR* argv[])
{
list<int> tLst;
for(int i=0;i<10;i++)
{
tLst.push_back(i);
}

list<int>::iterator tIter = tLst.begin();
for(;tIter!=tLst.end();tIter++)
{
printData(tIter);
}

system("pause");

return 0;
}

void printData(int* vData)
{
cout<<*vData<<endl;
}

编译不过,输出信息如下:
error C2664: “printData”: 不能将参数 1 从“std::list<_Ty>::_Iterator<_Secure_validation>”转换为“int *”
...全文
376 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaolomg 2011-09-08
  • 打赏
  • 举报
回复
lz修改下吧,迭代器和指针还是有区别的啊:
#include <iostream>
#include <list>
using namespace std;
void printData(int vData)
{
cout<<vData<<endl;
}
int main()
{
list<int> tLst;
for(int i=0;i<10;i++)
{
tLst.push_back(i);
}

list<int>::iterator tIter = tLst.begin();
for(;tIter!=tLst.end();tIter++)
{
printData(*tIter);
}

system("pause");

return 0;
}

melos 2011-09-08
  • 打赏
  • 举报
回复
楼主你这是把迭代器简单的理解为指针了。你的void printData(int* vData)这里要求传入的是一个int型的指针,但是你main里传入的实际上是一个迭代器,虽然它重载了*和->,但它本质上是一个对象,所以对printData来说,你所传入的参数当然不符合要求。
因此,你所需要的是传入一个int*,这个int*可以通过取地址来获取,即&addr,这里的addr是你list的一个元素,可以这样获取:*tIter,因此正确的写法应该是如4楼所写的:printData(&(*tIter))
ryfdizuo 2011-09-08
  • 打赏
  • 举报
回复
printData(&(*tIter))
(*tIter)迭代器解引用取出的是int,然后取地址是int*
低头路过 2011-09-08
  • 打赏
  • 举报
回复
那就printData(&(*tIter))或者printData(*(*tIter));
stelongleung 2011-09-08
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 dongguan131 的回复:]
改成printData(*tIter);试试
[/Quote]
肯定不行的,(*iTer)就变成int类型的了
低头路过 2011-09-08
  • 打赏
  • 举报
回复
改成printData(*tIter);试试

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧