Gehversuche mit Templates, Fehlermeldung bei Aufruf des template.



  • Guten Tag,

    ich laß heute einem C++ Buch etwas über templates. Probierte den Quellcode direkt aus. Leider bekomme ich Fehlermeldungen. Mit dem Überladen von Funktionen habe ich keine Probleme, allerdings ist mir nciht ganz klar, was die Fehlermeldung bedeutet. Ich werde derweil auch im Internet nach Anregungen suchen.
    Diese Meldung habe ich aus dem DevC++.

    #include <iostream>
     using namespace std;
    
     template <class T> T max(T x, T y){
       return (x>y) ? x : y;
     }
    
     int main(){
       int a = 5, b = 3;
       double c = 39.5, d = 22.6;
       cout << max(a,b) << "\n";
       cout << max(c,d) << "\n";
    
       return 0;    
     }
    

    bspl0101.cpp:16: error: call of overloaded max(int&, int&)' is ambiguous bspl0101.cpp:9: note: candidates are: T max(T, T) [with T = int] note:const \_Tp& std::max(const \_Tp&, const \_Tp&) [with \_Tp = int] bspl0101.cpp:17: error: call of overloadedmax(double&, double&)' is ambiguous
    bspl0101.cpp:9: note: candidates are: T max(T, T) [with T = double]
    note:const _Tp& std::max(const _Tp&, const _Tp&) [with _Tp = double]

    PS: Ich habe in diesem Forum den Suchbegriff template eingegeben. Ich denke das ist nicht so klug. Wie suche ich nach meinem obigen Problem besser?

    Grüße



  • Benenn deine Funktion einfach um oder pack es in einen namespace.
    Der Compiler kann hier nicht entscheiden ob er das max aus der Standardbiblothek oder dein max nehmen soll.


  • Mod

    Oder lass das using namespace std weg.



  • Braunstein schrieb:

    Benenn deine Funktion einfach um oder pack es in einen namespace.
    Der Compiler kann hier nicht entscheiden ob er das max aus der Standardbiblothek oder dein max nehmen soll.

    Hat natürlich beides geklappt, danke dir vielmals. Nun kann es weiter gehen.



  • und hör auf DevC++ zu nutzen. nimm lieber code blocks oder visual studio (visual c++). da sind die express versionen auch kostenlos



  • SeppJ schrieb:

    Oder lass das using namespace std weg.

    Ebenfalls möglich, danke.

    Ja, ich höre auf das Programm zu nutzen. Kein Problem, ich habe noch Alternativen hier. Für die kurzen Übungen habe ich Visual Studio einfach nicht genommen, weil ich mich damit noch nicht so richtig auskenne.



  • Ach, dazu musste aber fast nichts wissen. Du erstellst einfach ein neues Projekt der Art "Leeres Projekt", fügst Deine Quellcodedateien und evtl. Header hinzu und kompilierst, linkst und führst aus mit F5. Fertig 🙂



  • Eisflamme schrieb:

    Ach, dazu musste aber fast nichts wissen. Du erstellst einfach ein neues Projekt der Art "Leeres Projekt", fügst Deine Quellcodedateien und evtl. Header hinzu und kompilierst, linkst und führst aus mit F5. Fertig 🙂

    Klar, das ist natürlich der simple Weg. Ich war einfach der Ansicht, für Programme von dem Umfang wie oben brauche ich nicht so eine mächtige Entwicklungsoberfläche.


Anmelden zum Antworten