使用for_each时出错

Error while using for_each

本文关键字:出错 each for 使用      更新时间:2023-10-16

我的代码中有以下两个函数:

bool num()
{
    return 0;
}
void setDFS()
{
    int i = 0;
    project3::Graph<string, string> g1;
    std::for_each(g1.Vertice1.begin(), g1.Vertice1.end(),num);
}

函数所做的是对于向量Vertice1中的每个顶点,它现在必须将其编号设置为0。一旦我开始遍历图,稍后我将把num增加到遍历的计数。

在编译时,我得到"错误C2197: 'bool (__cdecl *)(void)':调用的参数太多"错误。

template <class VertexType, class EdgeType> class Vertex{
protected:
    VertexType vertice;
    EdgeType edge;
public:
};
std::vector<project3::Vertex<VertexType, EdgeType>*> Vertice1;

for_each算法接收一个一元函数,该函数应该具有以下签名:

void function(T&);

,其中T是g1的元素类型。Vertice1向量:

template <class VertexType, class EdgeType>
void num(project3::Vertex<VertexType, EdgeType>* v) {
  *v = 0; // <- Maybe v->set(0,0,0)
}

摘自SGI网站:

For_each将函数对象f应用于[first, last)范围内的每个元素;F的返回值(如果有的话)将被忽略。

一元函数是一种函数对象:被调用的对象就像普通的c++函数一样。一元函数只带一个参数。

据我从文档中了解,for_each构造将迭代传递的集合并将当前元素传递给函数,然后您需要相应地更新传递的项。

根据我以前的经验,我认为是同一个程序/同一个用户,我想说num需要接受一个字符串参数,因为它需要一些操作(看看头文件中std::for_each()方法的第三个参数的声明)。

同样,如果num()方法是对象的一部分,我认为它不会直接工作(因为c++对成员函数的隐式"this"参数)

一个可能的解决方案是在此函数周围使用非成员包装器,如下所示:

void my_non_member(string str)
{
    myobj.my_member(str); // myobj is a reference to a Vertice object that must be  
    // initialised elsewhere.
}