C++ C++;优先级队列不';你没有推吗?

C++ C++;优先级队列不';你没有推吗?,c++,xcode,stl,priority-queue,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)

我的文件顶部有以下内容:

#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;
}
但Xcode在我共享的最后一行中显示了此警告:


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

priority\u队列
是命名空间的一部分,
std
。您需要使用
std::priority\u queue
priority\u queue
是命名空间的一部分,
std
。您需要使用
std::priority_queue

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

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

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

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

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


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

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

因为我没有提供成员函数声明,所以这里很难有人向我指出这一点


谢谢你的帮助

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

因为我没有提供成员函数声明,所以这里很难有人向我指出这一点



谢谢你的帮助

当你使用C++时,你为什么要声明你的结构C?请完整的例子。编译器是否有其他错误?检查你没有其他的头文件,它定义了一个不同的版本:“代码> PrimyIyQueLe>/Cuff>。@ Casar -我只需要存储数据。除非我弄错了,否则使用类而不是结构会有一些开销,不是吗?键入
struct
和键入
class
一样简单,为什么不呢?没有其他错误正在生成。为什么当使用C++时,你要声明你的结构C?请完整的例子。编译器是否有其他错误?检查你没有包含的其他头文件,它定义了一个不同版本的代码> PrimyIyQueLe}/COD>。@ Casear -我只需要存储数据。除非我弄错了,否则使用类而不是结构会有一些开销,不是吗?键入
struct
和键入
class
一样简单,为什么不呢?没有生成其他错误。如果是这种情况,错误不应该出现在声明上,而不是推送上。但是他可能没有按照正确的顺序犯错误。这两个都是错误,你是对的。是的,他给出的代码是不完整的,所以我假设错误也可能不完整。它是在编译器标记错误的地方定义的吗?如果在声明和使用时出错,编译器是否必须在声明时指出错误?我不知道它是如何工作的。我见过编译器在声明时给出错误,但是继续假设声明的变量是
int
,然后给出额外的错误,因为
int
没有成员函数。如果是这样,错误不应该出现在声明上,而不是推送上。但是他可能没有按照正确的顺序犯错误。这两个都是错误,你是对的。是的,他给出的代码是不完整的,所以我假设错误也可能不完整。它是在编译器标记错误的地方定义的吗?如果在声明和使用时出错,编译器是否必须在声明时指出错误?我不知道它是如何工作的。我见过编译器在声明时给出一个错误,但是继续假设声明的变量是
int
,之后会给出额外的错误,因为
int
没有成员函数。Push在C++11之前就已经存在了。您将
std::
添加到
priority\u queue
)@Sancho:对,我不得不这么做,但我假设OP的头中有一个
using namespace std
using
声明,否则编译器会在调用
push()
之前发出错误。是的,询问者需要澄清编译器是否在列出错误之前给出了其他错误。。。
priority_queue<cell_t> blankCellQueue;
cell_t cell;
cell.x = x;
cell.y = y;
blankCellQueue.push(cell);