2013-08-13 2 views
1

나는 클래스를 가지고 있는데, 사전 및 사후 증분 모두를 operator++으로 정의하려고합니다. 또한 사전 및 사후 감소를 정의하려고합니다. 즉 operator--입니다. 주에서이 같은 일을하려고 할 때 나는 오류가 발생Polynomial ++ : p (x)를 1 씩 증가시키는 방법

class Polynomial 
{ 
public: 
    Polynomial(); 
    Polynomial(vector<int>coeffs); 
    /* 
    . 
    . 
    . 
    */ 
    Polynomial operator++(); 
    Polynomial& operator++ (int unused); 
    Polynomial operator--(); 
    Polynomial& operator-- (int unused); 
    /* 
    . 
    . 
    . 
    */ 

private: 
    vector<int> coefficient; 
}; 

Polynomial Polynomial::operator++() 
{ 
    coefficient[0]++; 
    return *this; 
} 
Polynomial& Polynomial::operator++ (int unused) 
{ 
    Polynomial copy(*this); 
    coefficient[0]++; 
    return copy; 
} 
Polynomial Polynomial::operator--() 
{ 
    coefficient[0]--; 
    return *this; 
} 
Polynomial& Polynomial::operator-- (int unused) 
{ 
    Polynomial copy(*this); 
    coefficient[0]--; 
    return copy; 
} 

: 여기 내 코드의 조각입니다

Polynomial p( ... 일부 벡터 ... );

cout << p++;

+3

일반적으로 사전 증가는 참조를 반환합니다. 후행 증가 값을 반환해야합니다. 당신이 잘못한 것처럼 보입니다. – juanchopanza

답변

2

후위 교환 연산자에서 임시 게시자에 대한 참조를 반환합니다.

이것은 정의되지 않은 동작입니다. 당신은 게시물의 반환 유형을 가지고 주위에 잘못된 방법으로 미리 증가시킵니다. 다음과 같은 것이 필요합니다.

Polynomial& operator++(); 
Polynomial operator++ (int); 
Polynomial& operator--(); 
Polynomial operator-- (int);