IDE认为函子是构造函数?

问题描述 投票:0回答:1

我正在尝试为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运算符()',因此我不确定为什么会这样,将不胜感激!

c++ constructor functor
1个回答
0
投票

您需要一个对象来调用非静态成员函数。编译器正确地期望首先调用构造函数。试试这个:

primms_vertex::primms_distance()(a, temp)
                            //^ constructor
                            //   ^ operator()
© www.soinside.com 2019 - 2024. All rights reserved.