+operator für template Klasse überladen



  • Hallo !

    Ich soll für eine template Klasse einen +operator überladen. Mein Compiler meckert aber und gibt
    "expected constructor, destructor, or type conversion before âoperatorâ"
    aus. Ich finde die Fehlermeldung an dieser Stelle etwas seltsam. Habt Ihr einen Tipp?

    #include<iostream>
    
    using namespace std;
    
    template<typename T>class Complex{
    	  private:
    	  		  T re;
    	  		  T im;
    
    	  public:
    	  		 Complex(T r=0,T i=0):re(r),im(i){}
    
            	 T get_re() const {return re;}
            	 T get_im() const {return im;}
            	 void set_re(T r) {re=r;}
            	 void set_im(T i) {im=i;}
    
    	  };
    
    template<typename T,typename S>class Kreis{
    	  private:
    	  		  Complex<T> mid;
    	  		  S rad;
    
      	  public:
    	  		 Kreis(Complex<T> m,double r):Complex<T>(m),rad(r){}
    			   	Complex<T> get_mid() const {return mid;}
    				S get_rad() const {return rad;}
    				void set_mid(Complex<T>& m) {mid=m;}
    				void set_rad(S r) {rad=r;}   	    
    	  };	 
    
    template<typename T>Complex operator-(const Complex<T>& z, const Complex<T>& w)
    {
       Complex<T> r;
       r.get_re(z.get_re()+w.get_re());
       r.get_im(z.get_im()+w.get_im()); 
       return r;
    
    }
    
    int main()
    {
    return 0; 	
    }
    

    Lg Caro



  • Bei deinem operator- fehlen dem Rückgabetyp die Template-Parameter:

    Complex<T>
    

    Und sag nächstes Mal bitte, in welcher Zeile der Fehler auftritt.



  • Die Fehlermeldung bezieht sich auf Zeile 33



  • Wieso operator- ? Ich dachte, du willst Operator "+" überladen?

    r.get_re(z.get_re()+w.get_re());
       r.get_im(z.get_im()+w.get_im());
    

    Gibt ja wohl gar keinen Sinn. Meinst du r.set_re() ?



  • fischldi schrieb:

    Die Fehlermeldung bezieht sich auf Zeile 33

    Hab ich inzwischen gemerkt und sogar schon die Lösung hingeschrieben.



  • Hab den Fehler auch gerade gesehen,ich brauche einen +operator



  • Bin ich damit über das Ziel hinausgeschossen?

    Complex<T> operator+(const Complex<T>& z, const Complex<T>& w)
    {
       Complex<T> r;
       Complex<T>r.get_re(Complex<T>z.get_re()+Complex<T>w.get_re());
       Copmplex<T>r.get_im(Complex<T>z.get_im()+Complex<T>w.get_im()); 
       return Complex<T> r;
    
    }
    


  • ja.

    template<typename T>
    Complex<T> operator+(const Complex<T>& z, const Complex<T>& w)
    {
       Complex<T> r;
       r.set_re(z.get_re()+w.get_re());
       r.set_im(z.get_im()+w.get_im());
       return r;
    
    }
    


  • Super,vielen Dank!!!



  • Die Funktion kannst du auf eine Zeile bringen.

    return Complex<T>(z.get_re() + w.get_re(), z.get_im() + w.get_im());
    

    Noch besser wäre es allerdings, einen operator+= anzubieten und den operator+ mithilfe dessen zu implementieren, so wie es in diesem Artikel erklärt wird. Lies den doch, dort stehen sehr viele wertvolle Informationen, was Operatorüberladung anbelangt.


Anmelden zum Antworten