2017-01-17 1 views
0

Je suis conscient que des questions similaires ont été posées, mais je n'arrive pas à trouver la solution. Je me sers de ce code pour retourner une fonction, mais il ne semble pas fonctionner:Appel de fonction surchargé double est ambigu

#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); 
} 

Je continue à recevoir ce message d'erreur:

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

Le 'Serial.print (roulement);' semble être un code inaccessible. –

+3

Je ne programme pas arduino mais le message d'erreur semble indiquer que l'argument attendu par 'Serial.print' est un' long unsigned int'. Vous passez un pointeur sur une fonction. –

+0

Il est très déroutant de dire "le point B (b1, b2)" dans le commentaire, puis "deg" et "degy" dans les paramètres. Ces paramètres sont-ils le point "B" ou non? Les noms ont l'air de représenter des angles en degrés. – molbdnilo

Répondre

3

Il y a trois problèmes avec le code se démarquer pour moi. La première est que vous remplacez les deux premiers paramètres et a2. Tout ce qui est passé à la fonction est perdu. Deuxièmement, l'appel Serial.print(bearing) est un code inaccessible, et ne serait jamais appelé même s'il ne lançait pas une erreur de compilation.

Une recherche rapide sur Internet de "Arduino Serial print" a trouvé des descriptions d'une méthode qui prendra des entiers et des flottants et enverra une représentation ASCII des valeurs sur une connexion série. Je suppose que c'est la fonction que vous utilisez. Cependant, l'appel de votre fonction essaie de passer un pointeur sur une fonction à l'appel Serial.print() au lieu d'un flottant ou d'une valeur entière. Si votre souhait est d'imprimer les résultats de l'appel à la liaison série, vous devriez le faire avec la valeur de retour de la fonction, pas dans la fonction elle-même avec un pointeur sur la fonction.

Quelque part dans votre code, vous appelez bearing. Je suppose que vous voulez qu'il ressemble à ceci:

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

Cela fera l'appel à bearing avec les paramètres souhaités, puis envoyer le résultat au port série.