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

C++ how to pass an STL list to a function

本文关键字:函数 列表 STL C++      更新时间:2023-10-16

我用C++编写了以下代码。函数"change_list"的声明给出了一个错误:"不允许使用不完整的类型"和"标识符"列表"未定义"。你知道为什么吗?我只是遵循了这篇文章中的答案:C++将列表作为函数的参数传递

#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;
}

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

您的代码中有两个问题:

  1. 你在main中使用了命名空间std,要么全局使用std(不好的做法(,要么使用std::list。
  2. 在函数 change_list 中,推送有效的 Point 类型指针,您正在推送一个整数。

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