我试图运行这个程序,迭代器通过一个方法传递。该方法应该增加一加值并返回它。我收到错误:C:\ C ++ programe file \ test2 \ main.cpp | 23 |错误消息:
无法将'std :: list :: iterator {aka std :: _ List_iterator}'转换为'int *'以将参数'1'转换为'int * getValue(int *)'|
#include <iostream>
#include <list>
using namespace std;
int* getValue(int*);
int main ()
{
list<int>* t = new list<int>();
for (int i=1; i<10; ++i)
{
t->push_back(i*10);
}
for (list<int>:: iterator it = t->begin(); it != t->end(); it++)
{
cout<< getValue(it)<< "\n"<<endl;
}
return 0;
}
int* getValue(int* data)
{
int* _t = data +1 ;
return _t;
}
任何人都知道如何纠正它?
答案 0 :(得分:1)
您的错误实际上非常适合。你的功能应该是这样的:
int getValue(list<int>::iterator data) // take an iterator instead of an pointer and return a int.
{
int _t = *data +1 ; dereference data to get the value at that location.
return _t;
}
在原始版本中,您使用的int *
与列表迭代器不同。你也返回一个指针而不是一个int值。取消引用是存在的,所以你在迭代器表示的位置增加值,而不是迭代器本身(对于列表迭代器来说甚至不可能)。
您也很可能不需要new
您的列表,只需使用具有自动存储持续时间的列表。变化:
list<int>* t = new list<int>();
到
list<int> t;