推送队列中的结构变量

时间:2015-05-09 18:05:23

标签: c++ struct queue

#include <iostream>
#include <queue>

using namespace std;

int main () {
    struct process {
        int burst;
        int ar;
    };
    int x=4;
    process a[x];
    queue <string> names; /* Declare a queue */
    names.push(a[1]);
    return 0;
}

我正在尝试在队列中推送struct变量,但它没有接受它并给出错误

no matching function for #include queue and invalid argument

我该怎么做?

1 个答案:

答案 0 :(得分:0)

C ++是一种强类型语言。在names.push(a[1]);行中,您尝试将struct(从process a[x];数组)推送到queue<string>。您的结构不是string,因此编译器将发出错误。您至少需要一个queue<process>

其他问题:可变长度数组不是标准C ++(process a[x];)。请改用std::vector<process>。以下是一些有效的简单示例:

#include <iostream>
#include <queue>
#include <string>
#include <vector>

using namespace std;

int main () {
    struct process // move this outside of main() if you don't compile with C++11 support
    {
        int burst;
        int ar;
    };
    vector<process> a;
    // insert two processes
    a.push_back({21, 42});
    a.push_back({10, 20});

    queue <process> names; /* Declare a queue */
    names.push(a[1]); // now we can push the second element, same type
    return 0; // no need for this, really
}

修改

用于实例化模板的本地定义的类/结构仅在C ++ 11及更高版本中有效,请参阅例如Why can I define structures and classes within a function in C++?以及其中的答案。如果您无法访问符合C ++ 11的编译器,请将struct定义移到main()之外。