C++ 向量中无效使用void表达式错误

C++ 向量中无效使用void表达式错误,c++,vector,stl,functor,C++,Vector,Stl,Functor,在下面的代码片段中,我不确定执行时为什么会出现“无效使用void表达式”这样的错误 具有向量的函数对象。即使它在向量外有效 #include<iostream> #include<vector> #include<algorithm> using namespace std; class AddVal { int i; public: AddVal (int a) : i(a) {} void operator()(int val) {

在下面的代码片段中,我不确定执行时为什么会出现“无效使用void表达式”这样的错误 具有向量的函数对象。即使它在向量外有效

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;

class AddVal {
  int i;
public:
  AddVal (int a) : i(a) {}
  void operator()(int val) {
    cout << i + val << endl;
  }
  void operator()(string obj) {
    cout << "string obj" << obj;
  }
};

int main() {
  vector<int> vec = { 1, 2, 3 };
  vector<string> vecs = { "mo", "han", "raj" };
  int x = 2;
  AddVal(2)("john"); // valid
  AddVal(1)(2);      // valid
//for_each(vecs.begin(), vecs.end(), AddVal(2)("john")); // not valid
  for_each(vec.begin(), vec.end(), AddVal(x));           // valid
  // not valid in vector (invalid use of void expression)
//for_each(vec.begin(), vec.end(), AddVal(1)(x));

  return 1;
}
#包括
#包括
#包括
使用名称空间std;
类AddVal{
int i;
公众:
AddVal(inta):i(a){}
void运算符()(int val){

看看每个人实际期望的输入:

作为要发送函数指针或函子的第三个参数。在无效情况下,发送的返回值为
void AddVal::operator()(int)
void AddVal::operator()(字符串)
(为void)

在有效的情况下,您正在发送一个类为AddVal的对象,即函数对象。

AddVal(1)
的结果是一个对象-您正在调用构造函数

这个对象有一个(两个)操作符()成员函数;一个接受int,另一个接受字符串

AddVal(1)(2)
是对对象
AddVal(1)
调用
operator()(int)
的结果,
由于
AddVal::operator()(int)
返回void,这就是
AddVal(1)(2)

的类型,您对每个(vec.begin()、vec.end()、AddVal(1)(x))的
有什么期望
返回不能在表达式中使用的
void
。可疑行将以调用
void运算符()结束(int-val)
,结果为
void
,与上下文无关。您是否打算使用返回类型和
return i+val;
而不是
cout
??它只是将向量元素与2相加。我的问题是没有向量,它不会闪烁错误,但有了向量,我就得到了这个错误。我希望这有帮助。AddVal(1)(x)有效但不在for_中。这是我的问题。函子已用作第三个参数。