当前位置: 首页 > 知识库问答 >
问题:

错误:无法将“”转换为“双(*)(双)” [重复]

能帅
2023-03-14

我有这个错误

error: cannot convert ‘<lambda(double)>’ to ‘double (*)(double)’

根据代码

void Matrice::mapEmplace(double (*fct)(double))
{
   for (size_t i = 1; i <= nLig; ++i)
      for (size_t j = 1; j <= nCol; ++j)
         (*this)(i, j) = (*fct)((*this)(i, j));
}

--

void function()
{
   // ...
   bool alea = something;

   // alea results on reading in a file
   utilisation.mapEmplace(
      [alea](double x) -> double {
         return alea ? 1 : 0;
      }
   );
   //....
}

例如,当我不通过将其声明为全局来捕获alea时,它就可以工作。但是当我在我的函数g范围内声明alea时,会显示此错误。

您知道问题是什么吗?我如何通过将alea保持在我的函数本地来解决问题?

共有2个答案

南门祯
2023-03-14

std::function专门用于处理捕获lambda。因此,将其替换为:

void Matrice::mapEmplace(double (*fct)(double)) {
  for(size_t i = 1; i <= nLig; ++i)
    for(size_t j = 1; j <= nCol; ++j)
      (*this)(i,j) = (*fct)((*this)(i,j));
}

有了这个:

void Matrice::mapEmplace(std::function<double(double)> fct) {
  for(size_t i = 1; i <= nLig; ++i)
    for(size_t j = 1; j <= nCol; ++j)
      (*this)(i,j) = fct((*this)(i,j));
}

并添加#包含

厉成仁
2023-03-14

您只能将无捕获lambda转换为c样式的函数指针。在您的情况下,您的lambda通过复制捕获alea,因此无法转换为函数指针类型。

你有两个选择:

  1. Either use the std::function with some type-eraser overhead.
  2. Or make the function as a templated one, so that the compiler can deduce the type of lambda.
    template<typename T>
    void Matrice::mapEmplace(T fct)
    {
       for (size_t i = 1; i <= nLig; ++i)
           for (size_t j = 1; j <= nCol; ++j)
               (*this)(i, j) = fct((*this)(i, j));
    }
    

 类似资料:
  • 更新:我已经尝试将getCalcMean()和calcMean;我理解这个错误的含义,但我不知道如何修复它,因为最终结果需要是double,我认为java可以计算double和int并得到double。我做错了什么? 我正在计算键入999后的总数平均值,但它一直显示为0,我不知道为什么。 有人能告诉我如何让我的getCalcMean()方法将平均值显示为numTotal/count吗? ---班级

  • 我还是一名学生,刚开始学习java编程语言,我只是想问一下如何将函数main中的参数从字符串转换为double,就像将字符串转换为整数一样。pasreInt(arg)

  • 我有下一个代码,它试图将双精度类型的数字转换为二进制形式。我知道这个算法,数字的整数部分可以像整型数字一样转换成二进制,剩下的分馏部分可以这样转换: 这是转换整数部分的代码 问题是我必须以双数查看RAM内存的方式打印整个数字(8字节格式),例如,如果我有数字42.375,结果必须是101010.011。但是我不知道如何组合时()和for()的二进制数并将它们放入64位的数组中,例如: |00000

  • 问题内容: 我有一个叫其IS 我想计算每个单词的。 我的问题是,返回 我不明白为什么每学期都会回来。我如何解决它? 我应该得到类似 问题答案: 您正在执行整数除法,然后键入强制转换: 类型转换将除法中的元素之一转换为浮点除法:

  • 我正在创建一个基本的GUI,它接受用户输入的金额,并用预先存在的金额减去它。然而,它不会让我运行下面的一个,因为我得到了一个字符串不能转换为double的错误。这里使用parseInt方法不起作用,因为im使用getText方法。

  • ActivationFunction.java:6:错误:不兼容类型:double无法转换为字符串r=double.ParseDouble(r);^ActivationFunction.java:8:错误:不兼容类型:如果(double.isNaN(x))返回r,则字符串无法转换为double;^