2016-06-07 6 views
-2

Etiketten I einen Stapel bin mit, der diese Art Etiketten und Funktionen definiert:C++ Funktion ist nicht eindeutig, wenn Typ verwendet

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

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

beim Aufruf der Funktion I eine FONAFlashStringPtr verwenden und true/false, die 1 definiert, für den und 0, aber ich bekomme diese Ausgabe:

Kann nicht bekommen, warum es ist falsch, sie sind vom gleichen Typ. Sollte der Compiler nicht durch die Typenschilder reisen?

EDIT

Es endete ein Eclipse-Bug zu sein, Projekt -> Sauber nicht gelöst hat, sondern Arbeitsplatz Neustart tat.

+5

Sie müssen die nächste Zeile (n) des Fehlers einschließen. Hinweis: "Kandidaten" sollten also 2 oder mehr Funktionen aufgelistet sein. –

Antwort

1

HTTP_para_start wird auch an anderer Stelle mit einer etwas anderen Signatur angegeben. Sie haben zwei Erklärungen, nicht nur eine. Sie zeigen also nicht die Gesamtheit Ihres Codes an, noch zeigen Sie alle Fehler an: Ihre Frage ist mangelhaft. Ein mehrdeutiger Anruf listet zwei oder mehr Kandidaten auf, nicht nur einen.

Zum Beispiel kann die folgenden nicht mit dem gleichen Fehler:

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 
} 

Allgemein gesprochen, da Sie C++ schreiben, nicht C, ist es nicht sinnvoll zusätzliche boolean artiger Typen zu erstellen. C++ hat bool, verwenden Sie es. Und nicht definieren Makros, die integrierte Schlüsselwörter Schatten (siehe this answer als Referenz).

Zumindest sind Ihre Makros für true und false falsch: Sie sind Ganzzahlen, nicht unsignierte Zeichen! Wenn dies C wäre, könnten Sie haben:

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

"Und definieren Sie keine Makros". Aber das OP hat das nicht gemacht. – Bathsheba

+0

@Bathsheba Er definierte "wahr" als 1 und "falsch" als 0. –

+0

Ich las, dass das OP * Denken *, dass 'wahr' und 'falsch 'so definiert wurden, ein bisschen wie sie sind C. Aber hab trotzdem eine Aufwertung. – Bathsheba

Verwandte Themen