Warum erhalte ich einen Template-Fehler, wenn ich meine Funktion „swap“ nenne, „Swap“ aber in Ordnung ist?

Lesezeit: 1 Minute

Benutzer-Avatar
Nash Vail

Okay, hier ist das Programm und funktioniert absolut richtig

#include <iostream>

using namespace std;

template <typename T>
void Swap(T &a , T &b);

int main(){

    int i = 10;
    int j = 20;

    cout<<"i, j = " << i <<" , " <<j<<endl;
    Swap(i,j);
    cout<<"i, j = " << i <<" , " <<j<<endl;


}
template <typename T>
void Swap(T &a , T &b){
    T temp;
    temp = a ;
    a = b;
    b= temp;
}

aber wenn ich den funktionsnamen ändere ab Tausch zu Tauschen

es erzeugt eine Fehlermeldung

Fehler: Aufruf von überladenem ‘swap(int&, int&)’ ist mehrdeutig| Hinweis: Kandidaten sind: void swap(T&, T&) [with T = int]| ||=== Bau abgeschlossen: 1 Fehler, 0 Warnungen ===|

Was ist passiert, ist es eine Regel, Funktionen mit Vorlagen zu starten, die mit einem Großbuchstaben beginnen?

  • Wer/wo wurde vorgeschlagen, dass Funktionsnamen mit Vorlagen mit einem Großbuchstaben beginnen sollten? Ich frage, weil ich es nicht weiß, nicht weil ich anderer Meinung wäre. Allerdings verwendet die Standardbibliothek zum Beispiel auch die Benennungskonvention in Kleinbuchstaben, so dass ich auf den ersten Blick keinen großen Vorteil für ein solches Namensschema finden kann. 🙂

    – zxcdw

    10. November 2012 um 16:12 Uhr

Dies liegt daran, dass bereits eine aufgerufene Funktion existiert swap. Es ist eigentlich unter der std Namespace, aber weil Sie einen haben using namespace std Zeile, es existiert ohne die std:: Präfix.

Wie Sie sehen können, verwenden Sie die using namespace std ist wegen möglicher Namenskollisionen nicht immer eine gute Option, wie in diesem Beispiel. Generell sollte man die lieber nicht verwenden using Direktive, es sei denn, es gibt einen wirklichen Grund dafür – Namespaces existieren aus einem bestimmten Grund – um Namenskollisionen zu vermeiden.

1012540cookie-checkWarum erhalte ich einen Template-Fehler, wenn ich meine Funktion „swap“ nenne, „Swap“ aber in Ordnung ist?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy