指针从C ++中的函数返回类型

时间:2014-02-04 16:20:05

标签: c++ pointers iterator

我试图运行这个程序,迭代器通过一个方法传递。该方法应该增加一加值并返回它。我收到错误: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;
}

任何人都知道如何纠正它?

1 个答案:

答案 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;