gpt4 book ai didi

c++ - 返回 lambda 表达式的方法中的转换错误

转载 作者:搜寻专家 更新时间:2023-10-31 00:08:57 25 4
gpt4 key购买 nike

这段代码没有问题:

#include "iostream"
#include "functional"
std::function<double (double)> retFun(double* a) {
return [a](double x) { return x+*a; };
}

int main(){

double*e = new double(3);
std::cout << retFun(e)(3) << std::endl;}

但是如果我在对象中声明 retFun:

.h

class InternalVariables : public Page
{
private:
std::function<double ()> retFun(double* a);
};

.cpp

std::function<double ()> InternalVariables::retFun(double *a)
{
return [a](double b){ return b+ *a;};
}

我收到以下错误

error: could not convert ‘InternalVariables::retFun(double*)::__lambda44{a}’ from ‘InternalVariables::retFun(double*)::__lambda44’ to ‘std::function’ return [a](double b){ return b+ *a;};

最佳答案

std::function<double ()>意味着您包装的函数对象将不带参数并返回 double . [a](double b){ return b+ *a;}是一个接受 double 的 lambda并返回 double .两个签名不匹配。

您应该将返回类型更改为 std::function<double (double)> .


还有:

  • 标准库标题应包含在 <...> 中.示例:<iostream> .

  • 无需分配 double在堆上获取指向它的指针。只需使用 &double 上在堆栈上。 C++11 中的分配应始终通过智能指针 完成,不要使用new/delete .

  • 您可能只想返回 auto而不是 std::function .后者是任何函数对象的类型删除包装器。 Lambda 有自己的匿名类型。

关于c++ - 返回 lambda 表达式的方法中的转换错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45937082/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com