Operatorüberladung in Templateklassen



  • Hallo LEute

    meine Frage heute, bin ja noch am üben, und mache grad bisschen templateklassen!

    Erstmal mein Code:

    template<typename T1=int,typename T2=int>
    class test
    {
     public:
      test(){};
      test(test& t){data=t.data;index = t.index;}
      void SetData(T1 _tdata,T2 _tindex);
      friend ostream& operator<<(ostream& stream,test<T1,T2>& t)     //in klasse wegen template
     {
     stream<<t.data;
     return stream;
     }
     friend test& operator=(test& t)
     {
      data=t.data;
      index=t.index;
      return *this;
     }
     private:
     T1 data;
     T2 index;
    
    };
    template<typename T1,typename T2>
    void test<T1,T2>::SetData(T1 _tdata,T2 _tindex)
    {
     data=_tdata;
     index= _tindex;
    
    }
    
    int main(int argc, char* argv[])
    {
     test<> t;
     t.SetData(10,20);
     test<> t2;
     t2=t;
     cout<<t;
     cout<<t2;
     getch();
            return 0;
    }
    

    und hier fehlermeldungen:

    [C++ Fehler] Unit1.cpp(28): E2239 'operator =(test<T1,T2> &)' muß eine Elementfunktion sein
    [C++ Fehler] Unit1.cpp(28): E2239 'operator =(test<int,int> &)' muß eine Elementfunktion sein
    [C++ Fehler] Unit1.cpp(49): E2450 Undefinierte Struktur 'test<int,int>'
    [C++ Fehler] Unit1.cpp(49): E2449 Größe von 't' unbekannt oder Null
    [C++ Fehler] Unit1.cpp(49): E2450 Undefinierte Struktur 'test<int,int>'
    [C++ Fehler] Unit1.cpp(51): E2450 Undefinierte Struktur 'test<int,int>'
    [C++ Fehler] Unit1.cpp(51): E2449 Größe von 't2' unbekannt oder Null
    [C++ Fehler] Unit1.cpp(51): E2450 Undefinierte Struktur 'test<int,int>'
    

    wie überladet man denn operatoren in tamplates richtig?



  • Die Fehlermeldung sagt eigentlich alles:

    Das "friend" ist zu viel:

    test& operator=(test& t) 
    { 
      data=t.data; 
      index=t.index; 
      return *this; 
    }
    

Anmelden zum Antworten