我有这个错误
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
保持在我的函数本地来解决问题?
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));
}
并添加#包含
您只能将无捕获lambda转换为c样式的函数指针。在您的情况下,您的lambda通过复制捕获alea
,因此无法转换为函数指针类型。
你有两个选择:
std::function
with some type-eraser overhead.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;^