簡體   English   中英

重載的函數調用不明確

[英]Overloaded function call 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),開發板:“ Arduino / Genuino Uno”

C:\\ Users \\ family \\ Documents \\ Arduino \\ GPStester \\ GPStester.ino:在功能'double bearing(double,double,double,double,double)'中:

GPStester:90:錯誤:重載的'print(double(&)(double,double,double,double,double))'的調用不明確

Serial.print(軸承);

注意:參數1從'double(double,double,double,double,double)'到'long unsigned int'的未知轉換

退出狀態1調用重載的'print(double(&)(double,double,double,double,double))'不明確

代碼中有三個問題對我很突出。 首先是您覆蓋前兩個參數a1a2 傳遞給函數的所有內容都會丟失。 其次, Serial.print(bearing)調用是無法訪問的代碼,即使它沒有Serial.print(bearing)編譯器錯誤,也永遠不會被調用。

在互聯網上快速搜索“ Arduino串行打印”后,找到了一種方法的說明,該方法將采用整數和浮點數,並通過串行連接發送值的ASCII表示。 我猜這是您正在使用的功能。

但是,您的函數調用試圖將指向函數的指針傳遞給Serial.print()調用,而不是浮點或整數值。 如果您希望將調用結果打印出來以支持串行鏈接,則應該使用函數的返回值來執行此操作,而不是使用指向函數的指針在函數本身中執行此操作。

在代碼中的某個地方,您將調用bearing 我懷疑您希望它看起來像這樣:

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

這將使呼叫bearing與所需的參數,然后將結果發送到串行端口。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM