C++ 向量中无效使用void表达式错误
在下面的代码片段中,我不确定执行时为什么会出现“无效使用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) {
#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_中。这是我的问题。函子已用作第三个参数。