VS2022中C++ Lambda表达式编译报错Error C2679求助
解决C++ Lambda表达式编译错误并实现变量相加功能
错误原因
编译错误Error C2679的根源是直接用cout输出Lambda对象lm_add,C++标准输出流std::ostream没有定义针对Lambda类型的operator<<运算符,编译器无法识别该操作,因此报错。
修正方案与实现代码
要实现指定变量k和l的相加功能,结合Lambda的特性,提供两种可行的修正方式:
方式一:Lambda捕获外部变量直接计算
让Lambda通过捕获列表获取k和l,无需额外传参,直接返回两者的和:
#include<iostream> using namespace std; int main() { int k = 98; int l = 23; // 捕获k和l,返回两者之和 auto lm_add = [k,l]() { return k + l; }; // 调用Lambda获取结果后输出 cout << "addition using lambda : " << lm_add() << endl; return 0; }
方式二:Lambda通过参数接收变量计算
保持Lambda的参数设计,调用时传入k和l完成计算:
#include<iostream> using namespace std; int main() { int k = 98; int l = 23; // 接收两个int参数,返回它们的和 auto lm_add = [](int i, int j) { return i + j; }; // 传入k和l调用Lambda,输出结果 cout << "addition using lambda : " << lm_add(k, l) << endl; return 0; }
说明
- 方式一中,Lambda通过捕获列表
[k,l]绑定外部变量,调用时只需lm_add()即可得到计算结果。 - 方式二中,Lambda不依赖外部捕获,完全通过参数接收输入,灵活性更高,可用于任意两个int值的相加。
内容的提问来源于stack exchange,提问作者P N Singh
相关产品推荐
相关产品推荐

