C ++ priority_queue没有push?

时间:2013-02-28 20:20:40

标签: c++ xcode stl priority-queue

我的文件顶部有这些:

#include <queue>

typedef struct cell_s {
    unsigned int x;
    unsigned int y;
    unsigned int ambiguity = 9;
} cell_t;

// so the priority_queue can sort the structs:
bool operator<(const cell_t &a, const cell_t &b) {
    return a.ambiguity < b.ambiguity;
}

在同一个文件中,我已将priority_queue声明为类的私有成员,如下所示:

priority_queue<cell_t> blankCellQueue;

然后我有一个包含这些行的同一个类的成员函数:

cell_t cell;
cell.x = x;
cell.y = y;
blankCellQueue.push(cell);

但是Xcode在我分享的最后一行提出了这个警告:

“没有匹配的成员函数来调用'push'”。

3 个答案:

答案 0 :(得分:2)

priority_queue是命名空间std的一部分。您需要使用std::priority_queue

答案 1 :(得分:1)

C ++ 11的std::priority_queue是标准容器适配器, 具有成员函数push() - 请参阅链接引用。

但是,您可能无法实现C ++标准库的实现。您应该升级到最新版本。

您可以看到代码编译here。它需要在std::之前添加priority_queue命名空间限定符,但我不认为这是问题的根本原因。如果是,您的编译器错误应该是不同的(或者您之前应该收到其他错误)。

答案 2 :(得分:1)

抱歉浪费了你所有的时间。我发现了这个问题。 priority_queue是我班级的成员。我试图编辑priority_queue的函数是一个我标记为const的成员函数,因为当我最初编写没有任何队列的时候,我没想到需要修改任何类变量。从const成员函数调用成员对象是一个明显的禁忌。我只是希望Xcode给出了一个稍微有用的错误消息...“从const函数调用的非const函数”这一行将是一个非常有用的消息。

由于我没有提供成员函数声明,所以任何人都很难在这里向我指出。

感谢您的帮助!