我的代码中有以下两个函数:
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;
答案 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.
}