我在尝试传递for_each循环中的函数时继续收到错误消息。我有一个向量,我使用for_each循环来遍历该向量中的行,现在我需要一个函数来做某事
示例这就是我想要实现的目标:
void DataPartitioning::doSomething()
{
for_each (label.begin(), label.end(), addToTemporaryVector());
}
void DataPartitioning::addToTemporaryVector()
{
cout<<"sucess";
}
但是我收到一条错误消息:错误:无效使用void表达式它们都在同一个类中。
答案 0 :(得分:0)
因为它是一个成员函数,所以你需要将它包装在一个在对象上调用它的仿函数中;大概是调用doSomething
的同一个对象:
for_each(label.begin(), label.end(), [this](whatever const &){addToTemporaryVector();});
其中whatever
是容器的值类型。
作为常规for循环可能更清晰:
for (whatever const & thing : label) {
addToTemporaryVector();
}
这假设你没有坚持使用pre-C ++ 11编译器。如果你是,那就需要更多的胡言乱语:
for_each(label.begin(), label.end(),
std::bind1st(std::mem_fun(&DataPartitioning::addToTemporaryVector), this));
我不完全确定这是否适用于像你这样没有参数的功能;但是大概你的真实代码确实需要一个参数来对每个元素做一些事情。
答案 1 :(得分:0)
你需要在这里使用结构:
http://en.cppreference.com/w/cpp/algorithm/for_each
#include <iostream>
#include<string>
#include <vector>
#include <algorithm>
using namespace std;
struct Operation
{
void operator()(string n) { cout<<"success"<<endl; }
};
int main() {
vector<string> vInts(10,"abc");
std::for_each(std::begin(vInts), std::end(vInts), Operation());
// your code goes here
return 0;
}
请注意,运算符的输入必须与向量中的类型相同。 (在此示例中为字符串,链接中为int)
答案 2 :(得分:0)
addToTemporaryVector
功能不使用this
。所以你可以将它声明为静态。
此外,它应该将label
声明:
static void addToTemporaryVector(const SomeType & item);
然后就这样做:
//No parentheses to the function pointer
for_each (label.begin(), label.end(), addToTemporaryVector);