2012-01-26 56 views
1

我在C++中創建了一個「日期」類,它包含日期,月份和年份變量以及一系列運算符函數。C++運算符函數內未聲明的標識符

我有我的類的date.h頭文件和date.cpp和date.cpp中的一個運算符函數給我一堆錯誤。

date.cpp (我想這個操作符,函數計算加入天並返回一個新的Date對象,並避免改動原來的日期對象。)

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()); 

任何幫助,非常感謝。 如果您需要查看更多代碼,請告訴我。

回答

3

如果getDay()getMonth()getYear()的成員函數,你想打電話給他們上this然後更改:

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

至:

date dTemp(getDay(), getMonth(), getYear()); 
+0

這似乎工作,非常感謝。你的答案和dbrank0的答案有什麼區別?因爲兩者都似乎工作。只是好奇,因爲我剛開始學習C++。 – Baburo

+2

@Baburo:區別在於dbrank0的代碼完全限定了函數名稱。如果'getDay'是一個虛函數,並且在'date'的派生類上調用'operator +',那麼'date :: getDay()'將調用'date'中的函數版本,而'getDay() '會調用派生類中的任何覆蓋。否則,它沒有區別,它只是指定相同功能的不同方式。 –

+1

順便說一句,你也可以寫'date dTemp(* this);',它將使用拷貝構造函數來創建'dTemp' –

2

也許你想在這裏調用靜態方法:

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

所以:

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