2012-01-26 3 views
1

나는 C++에서 날짜, 월 및 연도 변수와 함께 사용할 수있는 연산자 함수를 포함하는 "날짜"클래스를 만듭니다.C++ 연산자 함수 내 선언되지 않은 식별자

내 클래스에 date.h 헤더와 date.cpp가 있는데 date.cpp의 연산자 함수 중 하나에서 오류가 발생합니다.

date.cpp 는 (나는이 연산자 기능이 추가 된 일을 계산하고 새 날짜 개체를 반환하고 원래 날짜 개체에 변경되는 것을 방지 할 수 있습니다.)

date date::operator+(long days) const{ 

    date dTemp(date.getDay(), date.getMonth(), date.getYear()); 

    for(int i=0;i<days;i++){ 

     //If days go over a months day count. 
     if(dTemp.getDay() >= daysInMonth[dTemp.getMonth()]){ 
      dTemp.setDay(1); 
      if(dTemp.getMonth() < 12){ 
       dTemp.setMonth(dTemp.getMonth() + 1); 
      } 
      else{ 
       //Changing a year. 
       dTemp.setMonth(1); 
       dTemp.setYear(dTemp.getYear() + 1); 
      } 

     } 
     else{ 
      dTemp.setDay(dTemp.getDay() + 1); 
     } 
    } 
    return dTemp; 
} 

오류 :

1>h:\c++\teht21\teht20\date.cpp(74): error C2143: syntax error : missing ')' before '.' 
1>h:\c++\teht21\teht20\date.cpp(74): error C3484: syntax error: expected '->' before the return type 
1>h:\c++\teht21\teht20\date.cpp(74): error C2061: syntax error : identifier 'getDay' 
1>h:\c++\teht21\teht20\date.cpp(79): error C2065: 'dTemp' : undeclared identifier 
1>h:\c++\teht21\teht20\date.cpp(79): error C2228: left of '.getDay' must have class/struct/union 
1>   type is ''unknown-type'' 

라인 (74)은 다음과 같습니다

date dTemp(date.getDay(), date.getMonth(), date.getYear()); 

어떤 도움도 대단히 감사합니다. 더 많은 코드가 필요하면 알려주십시오. getMonth()getYear()이 멤버 함수는

date dTemp(date::getDay(), date::getMonth(), date::getYear()); 

답변

3

, getDay() 경우 당신은 다음 변경 this에 그들을 호출 할 : 그래서

date dTemp(date.getDay(), date.getMonth(), date.getYear()); 

:

+0

이 기능이 작동하는 것 같습니다. 대단히 감사합니다. 귀하의 답변과 dbrank0의 답변의 차이점은 무엇입니까? 둘 다 작동하기 때문에. 방금 C + +를 배우기 시작했기 때문에 궁금합니다. – Baburo

+2

@Baburo : 차이점은 dbrank0의 코드가 함수 이름을 완벽하게 한정한다는 것입니다. 'getDay'가 가상 함수이고'operator'가'date'의 파생 클래스에서 호출되면,'date :: getDay()'는'date'에서 함수의 버전을 호출합니다. 반면에'getDay() '는 파생 클래스에서 오버라이드를 호출합니다. 그렇지 않으면 차이가 없으며 동일한 기능을 지정하는 다른 방법 일뿐입니다. –

+1

Btw,'date dTemp (* this);'라고 쓸 수도 있는데, 복사 생성자를 사용하여'dTemp' –

2

아마 여기에 정적 메서드를 호출 할

date dTemp(date.getDay(), date.getMonth(), date.getYear()); 

~ :

date dTemp(getDay(), getMonth(), getYear()); 
관련 문제