C ++如何将STL列表传递给函数

时间:2017-03-21 07:41:31

标签: c++ stl

我在C ++中编写了以下代码。函数“change_list”的声明给出了一个错误: “不允许不完整的类型” 和“标识符”列表“未定义”。你知道为什么吗? 我只是按照这篇文章中的答案:C++ pass list as a parameter to a function

#include <iostream>
#include <list>

typedef struct Point {
    int x;
    int y;
} Point;

Point* initPoint(int x, int y) {
    Point* pt = (Point*)malloc(sizeof(Point));
    pt->x = x;
    pt->y = y;
    return pt;
}

void change_list(list<Point*> &mylist){   // ERROR!!!
    mylist.push_back(4);
}

int main()
{
    using namespace std;
    list<Point*> c1; // initiating a list
    c1.push_back(initPoint(1, 1));
    c1.push_back(initPoint(2, 2));
    c1.push_back(initPoint(3, 3));

    change_list(c1);

    for (Point* c : c1)
        cout << " " << c->x;
    cout << "\n";

    return 0;

}

2 个答案:

答案 0 :(得分:2)

问题是语句mylist.push_back(4),其中传递整数,而mylist期望Point*。如果您将其称为mylist.push_back(new Point()),则会对其进行编译。顺便说一句:也许你应该写std::list或在using std::list之后的某个地方放置一个#include<list>

答案 1 :(得分:1)

您的代码中存在两个问题:

  1. 您在main中使用了namespace std,要么使用std global(不良做法),要么使用std :: list。
  2. 在函数change_list中,按一个有效的Point类型指针,你正在推一个整数。

        void change_list(std::list<Point*> &mylist){   // ERROR!!!
            mylist.push_back(initPoint(8, 8));
        }