2014-04-10 5 views
1

그래서 두 개의 숫자가있는 간격 클래스가 있고 ++ 접두사와 접미사를 사용하려고하지만 오류가 발생합니다. 1 IntelliSense : 식에 클래스 형식이 있어야합니다. 오른쪽은, (i++).kiir();해야IntelliSense : 표현식에 클래스 형식 (접두사 접두사 오류)이 있어야합니다.

class intervallum 
{ 
    int a; 
    int b; 
public: 
    intervallum(); 
    intervallum(int x,int y); 
    intervallum operator++(); 
    void operator++(int); 
    void kiir(); 
}; 

intervallum intervallum::operator++() 
{ 
    a -= 1; 
    b += 1; 
    return intervallum(a,b); 
} 

void intervallum::operator++(int) 
{ 
    operator++(); 
} 

void intervallum::kiir() 
{ 
    cout << "[" << a << "," << b << "]" << endl; 
} 

void main() 
{ 
    intervallum i(2,4); 
    i.kiir(); 
    (++i).kiir(); 
    i.kiir(); 
    (i++).kiir; // <- the error is with this 
    i.kiir(); 
} 
+0

'intervallum 연산자 ++() :

당신은 아마 rigth 하나를 작성하는 작업자의 서명 목록을 확인해야합니다. 그리고 void 연산자 ++ (int);는'intervallum'을 리턴해야합니다. –

+0

도움 주셔서 감사합니다! 내가 잘못했는지, void operator ++ (int)를 intervallum operator ++ (int)로 바꿔야 만했다.이 방법은 내가 상상했던대로 제대로 작동한다. – user3520631

+0

@ user3520631 SO 철학은 사용자에게 도움을 주려는 것이다. 당신이하는 방법은 * upvoting * answers (숫자 위에 삼각형 모양의 버튼)입니다. 대답을 수락 할 수도 있습니다. 즉, 가장 도움이 된 답변이었습니다. 어느 것이 대개 큰 문제가 아닙니다. –

답변

0

(i++).kiir; 

먼저 표현을 살펴보십시오 : 여기

코드인가? 그렇다고하더라도 intervallum::operator++(int)void을 반환하고 void 오브젝트 (존재하는 경우)를 통해 kiir을 호출하려고합니다. 안좋다.

는 몇 가지가 통지 있습니다 코멘트에서 제안한 것처럼

  • intervallum::operator++()이 작용되는 개체에 대한 참조를 반환해야합니다 그렇지 않으면 복사 작업을하게 될 겁니다.
  • 실제로mainint을 반환한다고 컴파일러에게 말하면 안됩니다.
+0

도움 주셔서 감사합니다! 내가 잘못한 것을 가지고있다. void operator ++ (int) to intervallum operator ++ (int) – user3520631

0

intellisense가 아닌 컴파일러 출력을 읽어야합니다.

main.cpp(38): error C2228: left of '.kiir' must have class/struct/union 
       type is 'void' 

그런 다음 당신이 (내 예 38) 표시 줄로 이동, i++을 마우스 오른쪽 버튼으로 클릭 선택 "정의로 이동"과 방법은 정말 void를 반환 참조 : 컴파일러는 명시 적으로 문제를 말한다. `참조를 반환해야`intervallum 및`; Operators in C and C++

+0

도움을 주셔서 감사합니다! 내가 잘못한 것을 가지고있어, 변경해야만했다. void operator ++ (int) to intervallum operator ++ (int) – user3520631

관련 문제