Template



  • Hallo,

    arbeite mich gerade in Templates ein. Warum funktioniert folgender Code nicht?
    Danke schon mal

    #include <iostream>
    #include <string>
    using namespace std;
    
    int max(int a, int b)
    {
    	if (a > b) return a;
    	else return b;
    }
    
    template <class T>
    T max_template(T a, T b)
    {
    	if (a > b) return a;
    	else return b;
    }
    
    class Test_class
    {
    	string m_Name;
    	public:
    	Test_class(string Name):m_Name(Name){};
    	Test_class(Test_class &copyconst){m_Name = copyconst.m_Name;};
    	bool operator> (const Test_class &Test)
    	{
    		return this->m_Name.length() > Test.m_Name.length();
    	}
    	/*bool operator < (const Test_class &Test)
    	{
    		return this->m_Name.length() > Test.m_Name.length();
    	}*/
    };
    
    int main() {
    
    	cout << "Größte Zahl ist: " << max(2,5)<<endl;
    	cout << "Größte Zahl ist: " << max_template(2.3,5.6)<<endl;
    	cout << "Größte Zahl ist: " << max_template(2,6)<<endl;
    	Test_class T1("TEST"),T2("LaengeralsTEST");
    	max_template(T1,T2);
    	max (T1,T2);
    	//cout << "Längster Name ist: "<< max(T1,T2) <<endl;
        return 0;
    }
    

  • Mod

    Const-correctness beachten!

    bool operator < (const Test_class &Test) const
    

    Dann funktioniert es.

    edit: Beziehungsweise nicht unbedingt. Deine Funktion max wird nicht genommen, denn die verlangt ja nach zwei Integern. Stattdessen wird std::max genommen (da using namespace std am Anfang steht), sofern std::max durch einen der anderen Header schon eingebunden wird (was nicht zwangsläufig so ist, bei mir aber zufällig schon). Normalerweise wird max im Header <algorithm> definiert.



  • Vergleichsoperatoren solltest du als freie Funktionen und nicht als Member implementieren.

    bool operator< (const Test_class& lhs, const Test_class& rhs);
    

    Warum, steht hier.


Anmelden zum Antworten