2017-12-06 8 views
-3

안녕하세요 여러분, 템플릿과 같은 pair을 구현하려고합니다. 나는 이것을 시도했다 :페어 템플릿의 오버로드 할당 (=) 연산자

#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; 
    } 

그러나 오버로드 된 메서드의 마지막 줄에 오류가 나타남 =. this 개체를 반환 할 수 없습니다.

누구든지 내가 뭘 잘못하고 있는지 도울 수 있습니까?

+0

'T1' /'T2' 란 무엇입니까? 그들은 선언되지 않았다. –

+0

'* this'를 반환해야합니다. –

+0

s /'쌍 연산자 = (const 쌍 & otherPair)'/'쌍 & 연산자 = (쌍을 const & otherPair)'s /'이것을 돌려줍니다; * this;'. – user0042

답변

2

운영자는 운영자의 유형 Pair의 객체 포인터 this을 변환하려고 다음 오류로

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

    return *this; 
} 

처럼 보일 것입니다.

+0

왜이 대신 이걸 돌려 주나요? 반환 유형을 페어 에서 페어 &&로 변경했습니다. –

+1

@DevendraVerma이 타입은 Pair *이고 반환 타입은 Pair입니다. 포인터에서 유형 쌍의 오브젝트에 대한 내재적 변환이 없습니다. C++에서 할당 연산자는 기본 유형에 대해 lvalue에 대한 참조를 반환합니다. 따라서 사용자 정의 클래스는이 규칙을 따라야합니다. –

+0

오, 알았어. 연산자 오버로딩의 기본에 대해 명확하지 않았습니다. –