我正在尝试为DSA类编写基本算法的实现。有一些细微之处使项目变得有些棘手(某些点无法根据该位置的“地形”来达到),因此我制作了一个仿函数以获取距离(边缘权重)。我的仿函数看起来像这样
class primms_distance{
double operator ()(const primms_vertex &a, const primms_vertex &b){
//ommitted for University honor code purposes
}
};
但是,我稍后执行以下操作(出于荣誉代码的目的再次简化)
primms_vertex temp = priority_queue.top();
priority_queue.pop();
for(primms_vertex a : primms_vector){
if(omitted && primms_vertex::primms_distance(a, temp) < a.distance)
}
此对primms距离的调用使我得到错误'初始化'primms_vertex :: primms_distance'没有匹配的构造函数。有人知道为什么会这样吗?函子明确定义为'double运算符()',因此我不确定为什么会这样,将不胜感激!
您需要一个对象来调用非静态成员函数。编译器正确地期望首先调用构造函数。试试这个:
primms_vertex::primms_distance()(a, temp)
//^ constructor
// ^ operator()