template



  • Hallo,
    habe gerade mit dem Kapitel Templates begonnen.
    Irgendwie sind da noch so einige Lücken bei mir.
    Warum klappt zum Beispiel dieser Code nicht???
    Was habe ich (falsch) eingesetzt????

    #include <iostream>
    using namespace std;
    
    template <class T>
    T max(T eins, T zwei)
    {
    	return (eins>zwei?eins:zwei);
    	}
    
    	int main(){
    		int one=4;
    		int two=3;
    		cout << "Template\n" << max(one,two) << endl;
    
    		return 0;
    	}
    

    Gibt es empfehlenswerte Sites???
    Danke schon mal



  • Hallo,
    An für sich ist dein Code korrekt. Das einzige Problem ist, dass es bereits eine (Template) Funktion max im Namensraum std; gibt, und somit deine Template-funktion max eine nicht zulässige Überladung darstellt.

    Lösung: Einfach deine eigene template-Funktion in einen eigenen Namensraum packen.

    namespace my_scope
    {
           template<class T>
           const T& max(const T& a, const T& b)
           {
                    return ((a > b) ? a : b);
           }
    }
    
    ...
    
    //Aufruf z.B.
    my_scope::max(4, 5);
    ...
    

    Ansonsten bzg. den Sachen, die ich an der Funktion anders machen würde, siehe obiger Code...

    Caipi



  • Noch einfacher wäre, den qualifier für den globalen Namensraum voranzustellen, also

    ::max(a, b);
    

Anmelden zum Antworten