2017-01-17 6 views
0

私は同様の質問がされていることを知っていますが、解決策を見つけることができません。 I機能を返すために、このコードを使用してきたが、動作していないよう:オーバーロードされた関数呼び出しdoubleはあいまいです

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

私は、このエラーメッセージ受信し続ける:そのコードを持つ3つの問題があり

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

を私に目立つまず、最初の2つのパラメータa1a2を上書きすることです。関数に渡されるものはすべて失われています。第2に、Serial.print(bearing)呼び出しは到達不能なコードであり、コンパイラエラーをスローしていなくても呼び出されることはありません。

「Arduinoシリアルプリント」をインターネットで簡単に検索すると、整数と浮動小数点数を取り、シリアル接続を介して値のASCII表現を送信するメソッドの説明が見つかりました。私はこれがあなたが使用している機能だと推測しています。

しかし、関数呼び出しは、浮動小数点数または整数値の代わりに関数へのポインタをSerial.print()呼び出しに渡そうとしています。呼び出しの結果をシリアルリンクに出力するようにしたい場合は、関数へのポインタを持つ関数自体ではなく、関数の戻り値を使用して呼び出しを行う必要があります。

コードのどこかでbearingに電話する予定です。私はあなたが、それは次のようになりたい疑う:

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

これは、所望のパラメータを持つbearingへの呼び出しを行い、その後、シリアルポートに結果を送信します。

関連する問題