C++ priority_queue没有推动力?
C++ priority_queue doesn't have push?
我在我的文件的顶部有这些:
#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函数"这样的信息会非常有用。
由于我没有提供成员函数声明,因此任何人在这里向我指出这一点是非常困难的。
谢谢你的帮助!
相关文章:
- 为什么这个 std::queue/指向结构的指针列表直到 List.Size() == 0 才释放内存?
- 将参数打包的参数传递到 std::queue 中,以便稍后使用不同的函数调用
- C++ queue.front();为什么不从第一个元素开始呢?
- 我可以擦除 std::queue 中间的节点吗?
- 获取大小时是否必须锁定 std::queue?
- 为什么我会收到"invalid conversion from 'Queue*/Stack*' to 'int'"错误消息?
- 销毁 std::queue 会导致内存错误
- 如何将一个 std::queue 的内容附加到另一个
- 使用元素加载 std::queue<uint8_t*> 的更有效方法?
- 为什么 std::queue 没有实现 insert() 而 std::d eque 实现了?
- 带有 std::vector 和 std::queue 的 Prim's 算法,我的代码有什么问题?
- C++程序在 #include 时无法编译<stack>,#include<queue>
- 是boost :: lockfree :: Queue(在多线程程序中)可锁定
- std :: queue :: pop()在其std :: unique_ptr数据上操作
- 通过 std::queue 中的元素的值获取元素的索引
- 如何索引指向数组 [queue] 的指针数组
- 像std::queue这样的c++标准库容器是否保证是可重入的
- 在 boost::lockfree:queue 默认构造函数的情况下断言失败
- 将元素推入 std::queue 时避免复制
- 连接两个C 文件(list.cc and queue.cc)困难