0

我的文件顶部有这些:

#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’”。

4

3 回答 3

2

priority_queue是命名空间的一部分,std. 你需要使用std::priority_queue.

于 2013-02-28T20:24:11.730 回答
1

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

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

感谢您提供帮助!

于 2013-03-01T04:48:37.697 回答
1

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

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

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

于 2013-02-28T20:25:58.383 回答