error: call of overload
-
Hallo alles zusammen,
habe versucht ein Beispiel für Templates nachzubauen leider erhalte ich eine Fehlermeldung.
hier ist der code#include <iostream> using namespace std; template <typename T> T swap (T a, T b) { T tmp; tmp=a; a=b; b=tmp; } int main () { int a=4,b=3; swap(a, b); return 0; }und hier ist die Fehlermeldung.
error: call of overloaded 'swap(int&, int&)' is ambiguous
-
Da Du mit using namespace std den gesamten std-Namensraum in den globalen importiert hast, hat das Funktionstemplate std::swap jetzt die gleiche Signatur wie Deine Funktion swap.
-
Es gibt in der Standard Bibliothek bereits eine Funktion swap() - und der Compiler kann nicht zwischen der std::swap() und deiner Funktion unterscheiden.
(außerdem hat deine Funktion zwei Fehler: (a) sie übernimmt ihre Parameter als Kopie, dadurch siehst du von außen nichts von der Vertauschung - und (b) da fehlt die return-Anweisung)
-
Und /Users/alexanderschaubert/Xcode/C++/Object11/main.cpp:16: hat da sicher auch nichts verloren, Alex.

-
Und zu guter letzt neben den anderen Hinweisen noch ein kleine Anmerkung:
Du solltest besser die Deklaration einer Variablen an ihre Initialisierung hängen.Statt:
T tmp; tmp=a; a=b; b=tmp;1 x Konstruktoraufruf
3 x ZuweisungLieber:
T tmp=a; a=b; b=tmp;1 x Kopierkonstruktoraufruf
2 x Zuweisungcu André
-
DANKE!!!
