错误 C2679:二进制 '<<': no operator found which takes a right-hand operand of type 'main::<lambda_1>'(或没有可接受的转换)

问题描述 投票:0回答:1

我正在学习在cpp中编写lamda表达式,下面是使用Visual Studio 2022 windows的代码

#include<iostream>
using namespace std;

int main()
{
  int k = 98;
  int l = 23;

  auto lm_add = [k,l](int i, int j) {
    return i + j;
    };

  cout << "addition using lambada : " << "cool" << lm_add << endl;

  return 0;

想要返回给定变量的答案。

c++ c++17 visual-studio-2022
1个回答
0
投票

这个

auto lm_add = [k,l](int i, int j) {
    return i + j;
};

使用 lambda 表达式初始化

lm_add
。在幕后,编译器生成一个未命名的唯一类型,其中包含具有指定签名的调用运算符,即采用两个整数,以及用于捕获的成员(也是两个整数)。该类型没有
<<
运算符将其通过管道传输到输出流。可以称为:

std::cout << lm_add(k,l);

但是,它无缘无故地捕获了

k
l
。也许您想要捕获变量,以便可以不带参数调用它:

auto lm_add = [k,l]() {
    return k + l;
};

std::cout << lm_add();

或者不捕获它们并传递参数:

auto lm_add = [](int i,int j) {
    return i + j;
};

std::cout << lm_add(k,l);
© www.soinside.com 2019 - 2024. All rights reserved.