2017-12-06 3 views
-3

Hallo an alle, ich versuche ein pair wie Vorlage zu implementieren. Ich habe es versucht:Überladungszuweisung (=) Operator in Paar Vorlage

#include<iostream> 
using namespace std; 
template<class T1, class T2> 
class Pair 
{ 
    //defining two points 
    public: 
    T1 first; 
    T2 second; 

    //default constructor 
    Pair():first(T1()), second(T2()) 
    {} 

    //parametrized constructor 
    Pair(T1 f, T2 s) : first(f),second(s) 
    {} 

    //copy constructor 
    Pair(const Pair<T1,T2>& otherPair) : first(otherPair.first), second(otherPair.second) 
    {} 

    //overloading == operator 
    bool operator == (const Pair<T1, T2>& otherPair) const 
    { 
     return (first == otherPair.first) && (second == otherPair.second); 
    } 

    //overloading = operator 
    Pair<T1, T2> operator = (const Pair<T1, T2>& otherPair) 
    { 
     first=otherPair.first; 
     second=otherPair.second; 
     return this; 
    } 


    int main() 
    { 
     Pair<int, int> p1(10,20); 
     Pair<int, int> p2; 
     p2 = p1; 
    } 

Aber ich bekomme den Fehler in der letzten Zeile der überladenen Methode =. Es ist nicht erlaubt, das this Objekt zurückzugeben.

Kann jemand helfen, wo ich falsch mache?

+0

Was ist 'T1' /' T2'? Sie sind nicht deklariert. –

+0

Sie müssen '* This' zurückgeben –

+0

s /' Paar operator = (const Paar & otherPair) '/' Paar & operator = (const Paar & otherPair) 'und s /' zurückgeben; '/' zurück * das; '. – user0042

Antwort

2

Der Betreiber sollte aussehen wie

//overloading = operator 
Pair<T1, T2> & operator = (const Pair<T1, T2>& otherPair) 
{ 
    if (this != &otherPair) 
    { 
     first=otherPair.first; 
     second=otherPair.second; 
    } 

    return *this; 
} 

Was den Fehler dann Sie den Zeiger this auf ein Objekt des Typs Pair in den Bediener zu konvertieren versuchen.

+0

warum gibst du * das statt dessen zurück? und änderte auch den Rückgabetyp von Paar zu Paar & /. –

+1

@DevendraVerma dies hat Typ Pair *, während der Rückgabetyp Pair ist. Es gibt keine implizite Konvertierung vom Zeiger auf ein Objekt vom Typ Pair. In C++ gibt der Zuweisungsoperator den Verweis auf Lvalue für grundlegende Typen zurück. Daher sollte eine benutzerdefinierte Klasse dieser Konvention folgen. –

+0

Oh, ich habe das. Ich war mir nicht über die Grundlagen der Überlastung von Operatoren im Klaren. –

Verwandte Themen