我不断收到错误消息“无法将'float *'转换为'float'作为回报​​”

我是C ++的新手,我正在使用Arduino平台。我正在为我的项目编写程序,有一次我需要将笛卡尔坐标系转换为圆柱坐标系。该程序采用大小为3的float数组并对其进行处理,然后返回一个大小为3的新float数组,并带有另一个系统中的坐标。我一直收到错误消息“退出状态1,无法将'float *'转换为'float'作为回报​​”,我完全不知道我的代码有什么问题或如何解决。有人可以帮我了解发生了什么事吗?

float CartesianToCylindrical (float pos[]){          //pos is in the form of [x,y,z]//
 float cylpos[3];
 cylpos[0] = sqrt((pos[0] ^ 2) + (pos[1] ^ 2));
 cylpos[1] = atan(pos[1] / pos[0]);
 cylpos[2] = pos[2];
 return cylpos;                                      //return in the form of [r,theta,z]//
TT30824 回答:我不断收到错误消息“无法将'float *'转换为'float'作为回报​​”

不幸的是,C风格的数组在C ++中不是一流的对象,这意味着您无法像其他对象类型一样轻松地从函数中返回它们。有很多方法可以解决该限制,但是它们很尴尬。 C ++的最佳方法是改为定义一个对象类型,如下所示:

#include <math.h>
#include <array>
#include <iostream>

// Let's define "Point3D" to be an array of 3 floating-point values
typedef std::array<float,3> Point3D;

Point3D CartesianToCylindrical (const Point3D & pos)
{
   //pos is in the form of [x,y,z]//
   Point3D cylpos;
   cylpos[0] = sqrt((pos[0] * pos[0]) + (pos[1] * pos[1]));
   cylpos[1] = atan(pos[1] / pos[0]);
   cylpos[2] = pos[2];
   return cylpos;
}

int main(int,char **)
{
   const Point3D p = {1,2,3};
   const Point3D cp = CartesianToCylindrical(p);
   std::cout << "(x,z) = " << cp[0] << "," << cp[1] << "," << cp[2] << std::endl;
}

....这样您就可以自然地传递和返回点值。

本文链接:https://www.f2er.com/3120515.html

大家都在问