gpt4 book ai didi

c++ - find_if 错误 : invalid initialisation of reference of type 'const node&' from expression of type 'node*'

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:58:36 34 4
gpt4 key购买 nike

我有一个结构节点:

struct node {
node *parent;
int x, y;
float f, g, h;
};

我定义了一个谓词条件 bool 函数,用于查找结构成员是否已经存在于 vector 中。

bool Isinit(const node &nm, const node &ref)
{
if(nm.x==ref.x && nm.y==ref.y)
return true;
else
return false;
}

然后我这样调用函数:

vector<node*>::iterator referIt=find_if (open.begin(), open.end(), Isinit);

报错:从类型“node*”的表达式中对类型“const node&”的引用的初始化无效。有人可以向我解释错误吗?

最佳答案

您的代码有两个问题:参数数量和参数类型:

vector<node*>::iterator referIt = 
find_if (open.begin(), open.end(), Isinit);

bool Isinit(const node &nm, const node &ref);

find_if 采用一元 谓词。它将在每个元素上调用它,直到找到谓词返回 true 的元素。该谓词必须接受容器中类型的一个参数。根据您对 find_if 的调用,该类型是 node*。因此,您的签名必须是:

bool Isinit(const node* nm);

现在这可能无法满足您的需求,因为您正在寻找一个 node* 来匹配您的 ref,因此您需要写一个仿函数:

struct Isinit {
const node* ref;

Isinit(const node*);
bool operator()(const node* nm); // compare passed-in 'nm'
// against member 'ref'
};

然后这样称呼:

vector<node*>::iterator referIt = 
find_if (open.begin(), open.end(), Isinit(ref));

其中,使用 C++11 lambda,都可以在线完成:

auto referIt = find_if(open.begin(), open.end(), [ref](const node* nm){
return nm->x == ref->x && nm->y == ref->y;
});

关于c++ - find_if 错误 : invalid initialisation of reference of type 'const node&' from expression of type 'node*' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28157476/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com