使用for_each时出错

时间:2011-04-10 13:56:58

标签: c++ graph foreach

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

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中的每个Vertice执行的操作,现在必须将其数字设置为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;

3 个答案:

答案 0 :(得分:3)

for_each算法会收到unary function,其中应包含以下签名:

void function(T&);

其中T是g1.Vertice1 vector的元素类型:

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

答案 1 :(得分:0)

取自SGI site

  

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

  

一元函数是一种函数对象:一个被调用的对象,好像它是一个普通的C ++函数。使用单个参数调用一元函数。

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

答案 2 :(得分:0)

从以前的经验来看,我认为是同一个程序/同一个用户,我会说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.
}