错误:无法将"float*"转换为"float"
error: cannot convert ‘float*’ to ‘float’ in return
我正在尝试在我的函数中传递一个浮点数数组并在输出列表中返回最小值,但由于某种原因我不断收到此错误,不确定它是什么。知道吗?
#include <iostream>
#include <sstream>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
float minOfList(float *list1) {
float lowest = list1[0];
float lowest2 = 0.0;
float low_values[] = {};
int list_length = sizeof(list1)/sizeof(list1[0]);
for (int item=1; item < list_length; item++) {
if (list1[item]<lowest) {
lowest2 = lowest;
lowest = list1[item];
}
// cout << lowest << endl;
// cout << lowest2 << endl;
}
low_values[0] = lowest;
low_values[1] = lowest2;
cout << low_values << endl;
return low_values;
}
int main(int argc, char **argv)
{
float mylist[] = {7.0,1.0, 2.5, 3.3,5.5,6,6};
float values = minOfList(&mylist);
cout << values << " "<< endl;
return 0;
}
原始问题的答案
关于您最初的问题,我复制并粘贴到 godbolt.org,它给出了:
<source>:30:12: error: cannot convert 'float*' to 'float' in return
30 | return low_values;
| ^~~~~~~~~~
切换到叮当声:
<source>:30:12: error: cannot initialize return object of type 'float' with an lvalue of type 'float [0]'
return low_values;
^~~~~~~~~~
这意味着您的low_values
数组不是浮点数。其实不然。为什么海湾合作委员会谈论float*
?因为当你在表达式中使用数组的名称(sizeof and & excluded(时,它就会变成指向第一个元素的指针。指向浮点数的指针不是浮点数。
此代码的真正问题
你说:"我正在尝试在我的函数中传递一个浮点数数组"。你不能。不是在C中,也不是在C++中。该语言不允许具有数组类型的参数。
实际上,您的参数是指向浮点数序列的第一个元素的指针。几个?只有函数外部的代码才能告诉它,因此您必须向函数提供信息。不可能知道指针指向的元素数量。
代码的第一个快速修复是这样,但它被简化以返回列表的最小值。
#include <iostream>
float minOfList(float *list, int len)
{
float lowest = list[0];
for (int item = 1; item < len; item++) {
if (list[item] < lowest) {
lowest = list[item];
}
}
return lowest;
}
int main(int argc, char **argv)
{
float mylist[] = { 7.0f, 1.0f, 2.5f, 3.3f, 5.5f, 6.f, 6.f };
int list_length = sizeof(mylist) / sizeof(mylist[0]);
float value = minOfList(mylist, list_length);
std::cout << value << "n";
return EXIT_SUCCESS;
}
从这里您可以扩展到返回列表中最低的两个数字,但请记住,您不能从函数返回数组。此外,我有意避免了您必须添加到此函数中的所有错误检查。
这是C,不是C++。请移至C++。
搬到C++
事情可以通过多种方式打开。无论如何,我会尽量保持保守,不使用为您准备好的算法,例如min_element()
单一最小情况的算法。
基本思路:
std::vector<>
而不是耦合指针和元素数- 尽可能通过常量引用传递
- 基于范围
std::array<>
返回两个浮点数(这可以通过许多其他方式完成(- 用于动态创建返回数组的初始值设定项列表
- auto 让编译器指定函数返回的变量的类型。
#include <iostream>
#include <vector>
#include <array>
float minOfList(const std::vector<float>& list)
{
float lowest = FLT_MAX;
for (const auto& item : list) {
if (lowest > item) {
lowest = item;
}
}
return lowest;
}
std::array<float, 2> two_minOfList(const std::vector<float>& list)
{
float lowest = FLT_MAX;
float second_lowest = FLT_MAX;
for (const auto& item : list) {
if (second_lowest > item) {
if (lowest > item) {
second_lowest = lowest;
lowest = item;
}
else {
second_lowest = item;
}
}
}
return { lowest, second_lowest };
}
int main(int argc, char **argv)
{
std::vector<float> mylist = { 7.0f, 1.0f, 2.5f, 3.3f, 5.5f, 6.f, 6.f };
float value = minOfList(mylist);
std::cout << "Minimum of list is: " << value << "n";
auto tm = two_minOfList(mylist);
std::cout << "Minimums of list are: [" << tm[0] << ", " << tm[1] << "]n";
return EXIT_SUCCESS;
}
相关文章:
- System.InvalidCastException - SQL to C++ - safe_cast<float>
- 没有从阵列<float>到阵列<int>的可行转换
- 数组下标的类型"float*[float]"无效
- 没有合适的构造函数可以从"float"转换为"_D3DCOLORVALUE"
- 为什么我会收到此错误?无法将 {lb, ub} 从<大括号括起来的初始值设定项列表>转换为 float(**)(float*, int)
- 将 **float array 从 C++ Dll 传递给 python
- 错误:二进制'operator*' 'float'和'float[0]'类型的操作数无效
- float* 已在 Gameobject.obj 中定义
- 如何将 qml 的文本转换为 float 和 int
- 为什么将 1 添加到 numeric_limits<float>::min() 返回 1?
- 有没有比static_cast更优雅的从int到float的演员阵容<float>?
- 编译器给出错误:format 指定类型 'float *',但参数的类型'double' [-Wformat]
- OPENCL 警告:不兼容的指针类型将'float __global[16]'传递给类型为 '__global float4 的参数 *
- 错误:无法将"float*"转换为"float"
- 如何在函数中将字符串和分数存储为(Int 或 float)
- 缩小从double到float的转换
- 着色器将uint8投射到float,并将其重新解释回uint
- 我一直收到错误"cannot convert 'float*' to 'float' in return"
- 谷歌测试编译错误 Os X:函数式转换从"int"到"internal::FloatingEq2Matcher"的模糊转换<float>
- 如何有效地将一个大std::字符串的一部分转换为float