繁体   English   中英

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

[英]C++ how to pass an STL list to a function

我用C ++编写了以下代码。 函数“ change_list”的声明给出了一个错误:“不允许使用不完整的类型”并且“未定义标识符” 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)); } 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM