2017-01-17 19 views
0

Я знаю, что схожие вопросы были заданы, но я не могу найти решение. Я использую этот код для возврата функции, но это не похоже на работу:Перегруженный вызов функции double is Ambiguous

#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), Board: "Arduino/Genuino Uno"

C:\Users\family\Documents\Arduino\GPStester\GPStester.ino: In function 'double bearing(double, double, double, double)':

GPStester:90: error: call of overloaded 'print(double (&)(double, double, double, double))' is ambiguous

Serial.print(bearing);

note: no known conversion for argument 1 from 'double(double, double, double, double)' to 'long unsigned int'

exit status 1 call of overloaded 'print(double (&)(double, double, double, double))' is ambiguous ambiguous

+4

'Serial.print (bearing);' представляется недостижимым кодом. –

+3

Я не программирую arduino, но сообщение об ошибке кажется, что аргумент, ожидаемый 'Serial.print', является' long unsigned int'. Вы передаете ему указатель на функцию. –

+0

Очень сложно сказать «точка B (b1, b2)» в комментарии, а затем «deg» и «degy» в параметрах. Являются ли эти параметры точкой «B» или нет? Имена выглядят так, будто они представляют собой углы в градусах. – molbdnilo

ответ

3

Есть три проблемы с кодом, выделяются мне. Во-первых, вы перезаписываете первые два параметра a1 и a2. Все, что передается функции, теряется. Во-вторых, вызов Serial.print(bearing) является недостижимым кодом и никогда не будет вызываться, даже если он не бросает ошибку компилятора.

Быстрый поиск в Интернете «Arduino Serial print» нашел описание метода, который будет принимать целые числа и поплавки и отправлять ASCII-представление значений по последовательному соединению. Я предполагаю, что это функция, которую вы используете.

Однако, вы вызываете функцию, которая пытается передать указатель на функцию в вызов Serial.print() вместо значения с плавающей точкой или целого числа. Если вы хотите распечатать результаты вызова для вывода на последовательный канал, вы должны сделать это с возвращаемым значением функции, а не самой функцией с указателем на функцию.

Где-то в вашем коде вы должны позвонить bearing. Я подозреваю, что вы хотите, чтобы выглядеть следующим образом:

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

Это сделает вызов bearing с требуемыми параметрами, а затем отправить результат к последовательному порту.