【发布时间】:2013-12-11 22:49:26
【问题描述】:
在下面的代码 sn-p 中,我不确定为什么在执行时会出现“无效使用 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;
}
【问题讨论】:
-
您对
for_each(vec.begin(), vec.end(), AddVal(1)(x));有什么期望?根据AddVal::operator()的类型,AddVal(1)(x)返回的void不能用于表达式。 -
可疑行最终会调用
void operator ()( int val),结果为void,并且不适用于上下文。你的意思是使用返回类型和return i + val;而不是cout???? -
它只是将向量元素与 2 相加。我的问题是没有向量它不会闪现错误但使用向量我会收到此错误。我希望它有所帮助。