C++ priority_queue没有推动力?

C++ priority_queue doesn't have push?

本文关键字:推动力 queue priority C++      更新时间:2023-10-16

我在我的文件的顶部有这些:

#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'没有匹配的成员函数".

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

c++ 11的std::priority_queue是一个标准的容器适配器,它确实有成员函数push() -参见链接的参考。

有可能你的c++标准库的实现是不兼容的。你应该升级到最新版本。

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

对不起,浪费了你所有的时间。我发现了问题所在。priority_queue是我的类的成员。我试图编辑priority_queue的函数是一个成员函数,我已经将其标记为const,因为我在最初编写它时没有预料到需要修改任何类变量,而没有任何队列。从const成员函数对成员对象调用push显然是一个禁忌。我只是希望Xcode给出了一个稍微有用的错误信息…类似"从const函数调用非const函数"这样的信息会非常有用。

由于我没有提供成员函数声明,因此任何人在这里向我指出这一点是非常困难的。

谢谢你的帮助!