2016-06-07 64 views
-2

我使用的疊層,它定義這些類型的標籤和功能:C++函數是不明確的使用類型時標籤

typedef const char * FONAFlashStringPtr; 
typedef uint8 boolean; // uint8 is replaced with unsigned char 

void HTTP_para_start(FONAFlashStringPtr parameter, boolean quoted = true); 

調用我使用FONAFlashStringPtr和真/假,這是1定義了功能時和0,但我得到這個輸出:

'HTTP_para_start' is ambiguous ' Candidates are: void HTTP_para_start(const char *, unsigned char)

無法得到爲什麼它令人不快,它們是相同的類型。編譯器不應該通過類型標籤?

編輯

它結束了作爲一個Eclipse的錯誤,項目 - >清潔沒有解決,但工作區重新做。

+5

您需要包含錯誤的下一行。注意:「候選人」應該有2個或更多的功能列出。 –

回答

1

HTTP_para_start也在別處聲明,簽名略有不同。你有兩個聲明,而不只是一個。因此,您沒有顯示完整的代碼,也沒有顯示所有的錯誤:您的問題是有缺陷的。一個模糊的電話會列出兩個或兩個以上的候選人,而不只是一個。

例如,下面的失敗,同樣的錯誤:

typedef const char * FONAFlashStringPtr; 
typedef unsigned char boolean; // uint8 is replaced with unsigned char 

void HTTP_para_start(FONAFlashStringPtr parameter, boolean quoted = true) {} 
void HTTP_para_start(FONAFlashStringPtr parameter, bool quoted = true) {} 

int main() { 
    HTTP_para_start("", 1); // you say you define true to be 1 
} 

一般來說,因爲你寫C++,不C,這是沒有意義的創造額外的布爾樣類型。 C++得到了bool,使用它。並且不要定義影響內置關鍵字的宏(請參閱this answer以供參考)。

至少,你的宏的truefalse是不正確的:它們是整數,而不是無符號的字符!如果這是C,則可能有:

#define true ((unsigned char)1) 
#define false ((unsigned char)0) 
+0

「不要定義宏」。但是OP沒有那樣做。 – Bathsheba

+0

@Bathsheba他確定'true'爲1,'false'爲0 –

+0

我讀到,OP *思維*,'true'和'false'是這樣定義的,有點像他們在C.但是,無論如何要有一個滿意的答案。 – Bathsheba

相關問題