2017-05-13 1 views
0

클래스에서 연산자 오버로딩 함수를 만들었습니다. 그리고 클래스의 오버로딩 함수를 호출하는 또 다른 함수를 만들었습니다. 그래서 소스를 컴파일 할 수C++에서 클래스에 연산자 오버로딩 함수를 사용할 수 있습니까?

#include <iostream> 
... 

class Zealot { 
    int x; 

    .... 

    void operator++() {    
    Zealot s; 
    s.x = -50; 
    for (auto i = 0; i < 2; ++i, tail.push_back(s)); 
    } 

    void Collision() { 
     ... 
     (*this)++;   // Error : C2676 
     ... 
    } 
    ... 
}; 

Zealot z; 

int main() { 
    z.Coliision(); 
} 

나는 오류 C2676을 가지고 :

나는 주요 기능의 작동에 과부하 기능 내가 메인 함수에서 다음과 같이 썼다 리콜 기능을 사용하고 싶습니다.

잘 처리하려면 어떻게해야합니까? 큰 도움이 필요합니다.

+3

사용자가 정의한 연산자는 '++'의 접두사 형식이므로 '++ (* this);'와 같이 호출 할 수 있습니다. postfix 형식은'int' 유형의 매개 변수 (달리 사용되지 않음)로 구별됩니다. 따라서'void operator ++ (int)'입니다. 'operator ++()'는 일반적으로 증분 된 객체에 대한 참조를 반환해야합니다. –

+0

@ Jerry Coffin 도와 주셔서 감사합니다! 나는 그것을 명심 할 것이다. – starrykss

답변

1

사용자가 오버로드 한 것은 사전 증가 연산자입니다.
현재 사용중인 것은 후행 증가 연산자입니다.

당신은 선행 증가 연산자 사용할 수 있습니다 :

++(*this); 

또는 후행 증가 oprator 구현 :

void operator++(int) { ... } 

는 관용적 일하기를, 당신의 반환 값을 변경해야합니다 그 기능들.

Zealot& operator++() { ... } 
Zealot operator++(int) { ... } 

연산자 오버로드에 대한 자세한 내용은 http://en.cppreference.com/w/cpp/language/operators을 참조하십시오.

+0

큰 도움에 감사드립니다! 나는 그 문제를 해결한다. – starrykss

+0

@starrykss, 여러분은 환영합니다. –