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 ©const){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; }
-
Const-correctness beachten!
bool operator < (const Test_class &Test) constDann 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.