重载函数调用double是不明确的

时间:2017-01-17 04:12:58

标签: c++ arduino double overloading arduino-ide

我知道已经提出了类似的问题,但我似乎无法找到解决方案。我一直在使用这段代码来返回一个函数,但它似乎不起作用:

#include <math.h>

// Computes the bearing in degrees from the point A(a1,a2) to
// the point B(b1,b2). Note that A and B are given in terms of
// screen coordinates
double bearing(double a1, double a2, double deg, double degy) {
a1 = 37.40733;
a2 = -121.84855;
static const double TWOPI = 6.2831853071795865;
static const double RAD2DEG = 57.2957795130823209;
// if (a1 = b1 and a2 = b2) throw an error 
double theta = atan2(deg - a1, degy + a2);
if (theta < 0.0)
    theta += TWOPI;
return RAD2DEG * theta;
Serial.print(bearing);
}

我一直收到此错误消息:

  

Arduino:1.8.1(Windows 7),主板:“Arduino / Genuino Uno”

     

C:\ Users \ family \ Documents \ Arduino \ GPStester \ GPStester.ino:在功能中   '双轴承(双,双,双,双)':

     

GPStester:90:错误:调用重载'打印(双(&amp;))(双,   double,double,double))''含糊不清

     

Serial.print(轴承);

     

注意:参数1从'double(double,double,double,double)'到'long unsigned int'没有已知的转换

     

退出状态1    调用重载'print(double(&amp;)(double,double,double,double))'含糊不清

1 个答案:

答案 0 :(得分:3)

代码有三个问题让我很突出。首先,您要覆盖前两个参数a1a2。无论传递给函数的是什么都会丢失。其次,Serial.print(bearing)调用是无法访问的代码,即使它没有抛出编译器错误也永远不会被调用。

“Arduino Serial print”的快速互联网搜索找到了一种方法的描述,该方法将采用整数和浮点数,并通过串行连接发送值的ASCII表示。我猜这是你正在使用的功能。

但是,函数调用试图将指向函数的指针传递给Serial.print()调用,而不是浮点数或整数值。如果您希望将调用结果打印到序列链接,则应该使用函数的返回值,而不是函数本身使用指向函数的指针。

在代码中的某个地方,您将调用bearing。我怀疑你希望它看起来像这样:

Serial.print(bearing(a1,a2,deg,degy));

这将使用所需参数调用bearing,然后将结果发送到串行端口。