必须调用对非静态功能的引用
Reference to non-static function must be called
我试图声明Priority_queue:
std::priority_queue<int, std::vector<int>, std::function<bool(int, int)>> m_openList;
我用来初始化它的方式是:
m_openList = std::priority_queue<int, std::vector<int>, std::function<bool(int,int)>>(keyCompare);
keycompare是一个函数:
bool PathPlanManager::keyCompare(int pointer1, int pointer2) {
return m_mapNode[pointer1] > m_mapNode[pointer2];}
,但这似乎是错误的。顺便说一句,我该如何清除此Priority_queue?
尝试后,我的代码就是这样:
class PathPlanManager {
public:
class KeyCompare {
public:
KeyCompare(PathPlanManager& manager) : m_manager(&manager){}
bool operator() (int pointer1, int pointer2) {
return m_manager->m_nodeMap[pointer1] < m_manager->m_nodeMap[pointer2];
}
private:
PathPlanManager* m_manager;
};
void init() {
m_nodeMap.resize(100);
for (int i = 0; i < 100; i++) {
m_nodeMap[i] = 100 - i;
}
m_openList = std::priority_queue<int, std::vector<int>, KeyCompare>();
}
private:
vector<int> m_nodeMap;
std::priority_queue<int, std::vector<int>, KeyCompare> m_openList;
};
当我尝试构建它时,有一个错误说没有匹配的构造函数来初始化'value_compare'(aka'pathplanmanager :: keycompare')
KeyCompare
需要一个 PathPlanManager
的对象:
class PathPlanManager {
public:
class KeyCompare {
public:
KeyCompare(PathPlanManager& manager) : m_manager(&manager) { }
bool operator()(int pointer1, int pointer2) {
return m_manager->m_mapNode[pointer1] > m_manager->m_mapNode[pointer2];
}
private:
PathPlanManager* m_manager;
};
private:
std::vector<int> m_mapNode;
typedef std::priority_queue<int, std::vector<int>, KeyCompare> mypq_type;
mypq_type m_openList;
}
示例用法:
PathPlanManager mgr; // somewhere this is initialised
...
// want to sort some entries according to mgr
std::vector<int> entries{ 0, 13, 37, 42 };
std::sort(entries.begin(), entries.end(), PathPlanManager::KeyCompare(mgr));
// now entries is sorted according to mgr
看到您的更新后:如果要使用priority_map
作为类的成员(我们称其为Planner
),则可以这样做:
class Planner {
public:
Planner(PathPlanManager& mgr);
private:
std::priority_queue<int, std::vector<int>, PathPlanManager::KeyCompare> m_openList;
}
Planner::Planner(PathPlanManager& mgr)
: m_openList(PathPlanManager::KeyCompare(mgr))
{ }
// Usage:
...
PathPlanManager mgr;
Planner planner(mgr);
...
相关文章:
- Qt中来自不同功能的按钮引用
- 引用 using 声明引入的功能的句子是什么意思?
- 警告#13212:引用需要堆栈对齐功能的EBX
- 我的模板功能具有通用引用不起作用
- C 使用多个lambdas/绑定以引用相同的功能
- FFMPEG关于多个功能的未定义引用
- 有没有办法在我的通用功能路由器设计中支持"常量引用"作为功能签名参数?
- 对我的功能的未定义引用
- 为什么功能程序的规律性允许按值传递和按常量引用传递?
- 未定义的引用指针的变量模板在clang中功能,而不是GCC
- IFDEF块内部对功能的未定义引用
- 对完整模板专业类成员功能的未定义引用,但不是部分专业化
- 对函数的未定义引用,该功能是另一个类的成员
- 呼叫功能的值,该功能通过引用C 中的指针
- 可以接受未知签名的可变功能引用的类
- 必须调用对非静态功能的引用
- C 通过引用DLL中的功能传递std ::字符串
- 为什么BOOST.RANGE RANGE_BEGIN/END FREE功能对const和非const引用都重载
- 模板功能:混合逐个复制传递和按引用传递
- 使用mingw对魔鬼功能的未定义引用