returns lambda 表达式的方法中的转换错误

Conversion error in a method that returns a lambda expression

这段代码没有问题:

#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 ()> 意味着您的包装函数 object 将不带任何参数并且 return 一个 double[a](double b){ return b+ *a;} 是一个带有 double 和 return 的 lambda double。两个签名不匹配。

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


还有:

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

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

  • 您可能只想 return auto 而不是 std::function。后者是任何函数 object 的 type-erased 包装器。 Lambda 有自己的匿名类型。