reference to non-static member function must be called 7 | std::priority_queue<int, std::vector<int>, decltype(cmp2)> q(cmp2);
时间: 2024-10-10 20:04:30 浏览: 30
High-Speed-Priority-Queue-for-C-Sharp:针对寻路应用程序优化的AC#优先级队列
在 C++ 中,`std::priority_queue` 是一个容器适配器,用于存储具有特定比较关系的元素。当你试图创建一个 `priority_queue` 并传入一个非静态成员函数(如 `cmp2`)时,编译器报错 "reference to non-static member function must be called",这是因为 `priority_queue` 需要一个可调用的对象或函数指针来进行元素的排序。
`decltype(cmp2)` 是用来获取 `cmp2` 的类型信息,但在这个上下文中,`cmp2` 是一个函数引用,而不是可以直接传递给 `priority_queue` 的函数。你需要提供一个函数指针或者一个已经实例化的对象,该对象拥有 `cmp2` 成员函数,以便 `priority_queue` 可以根据这个函数进行元素的比较。
正确的用法通常是这样的:
```cpp
class MyClass {
public:
bool cmp2(int a, int b) { /* 你的比较逻辑 */ }
};
MyClass obj;
std::priority_queue<int, std::vector<int>, decltype(&MyClass::cmp2)> q(obj.cmp2);
```
或者如果你有一个指向 `MyClass` 对象的指针,你可以这样做:
```cpp
MyClass* pObj = new MyClass();
std::priority_queue<int, std::vector<int>, decltype(pObj->cmp2)> q(pObj->cmp2);
// 不忘在适当的时候删除 pbject
delete pObj;
```
这里的关键是提供一个可以被调用的实际函数或函数指针,表示元素之间的比较规则。
阅读全文