Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 每个语句内部都有一个函数_C++ - Fatal编程技术网

C++ 每个语句内部都有一个函数

C++ 每个语句内部都有一个函数,c++,C++,在尝试在for_each循环中传递函数时,我不断收到错误消息。。我有一个向量,我用每个循环遍历向量中的行,现在我需要一个函数来做一些事情 示例这就是我试图实现的目标: void DataPartitioning::doSomething() { for_each (label.begin(), label.end(), addToTemporaryVector()); } void DataPartitioning::addToTemporaryVector() { cout&

在尝试在for_each循环中传递函数时,我不断收到错误消息。。我有一个向量,我用每个循环遍历向量中的行,现在我需要一个函数来做一些事情

示例这就是我试图实现的目标:

void DataPartitioning::doSomething()
{
    for_each (label.begin(), label.end(), addToTemporaryVector());
}

void DataPartitioning::addToTemporaryVector()
{
    cout<<"sucess";
}

但是我收到一条错误消息,上面写着:error:invalid use of void expression两者都在同一个类中。

因为它是一个成员函数,所以需要将它包装在一个对对象调用它的functor中;可能是调用doSomething的同一对象:

for_each(label.begin(), label.end(), [this](whatever const &){addToTemporaryVector();});
其中,容器的值类型是什么

作为常规for循环,它可能更清晰:

for (whatever const & thing : label) {
    addToTemporaryVector();
}
这假设您没有使用C++11之前的编译器。如果你是,它需要更多的胡言乱语:

for_each(label.begin(), label.end(),
    std::bind1st(std::mem_fun(&DataPartitioning::addToTemporaryVector), this));

我不完全确定这是否适用于像您这样不带参数的函数;但您的实际代码可能需要一个参数来处理每个元素。

您需要使用结构,如下所示:

请注意,运算符的输入必须与向量中的类型相同。字符串在本例中,addToTemporaryVector函数链接中的int不使用此字符串。因此可以将其声明为静态

此外,它还应以标签的模板类型作为参数

声明:

static void addToTemporaryVector(const SomeType & item);
那么就做:

//No parentheses to the function pointer
for_each (label.begin(), label.end(), addToTemporaryVector);

您需要传递函数,而不是调用函数的结果。但是请注意,传递成员函数是很棘手的,因为它需要一个对象来执行操作。那么您的意思是,我应该创建一个结构并将函数包含在其中吗?@George您应该这样做:@George:或者使用lambda、std::bind或常规for-loop。如果您的编译器支持它。
//No parentheses to the function pointer
for_each (label.begin(), label.end(), addToTemporaryVector);