2017-10-21 46 views
0

首先,這是爲了學術目的。我非常沮喪,而且我甚至一直在和一位朋友一起工作半天。朋友課程和重載的操作員

我們正在與重載的操作員和朋友班一起工作,這個實驗讓我覺得自己像個白癡。我將在下面發佈重要代碼,但整個項目將在帖子底部的zip文件中。我相信它充滿了錯誤,它現在拒絕保存我的一些代碼(它一直拋出異常)。

這是我的主要類的頭文件代碼

class NumDays 
{ 
private: 
    int hours; 
    double days; 

    void calcDays(int); 
public: 
    NumDays (int); 
    void setHours (int); 
    double getWork(); 
    NumDays operator+ (const NumDays &); 
    NumDays operator- (const NumDays &); 
    NumDays operator++(); 
    void operator<< (const NumDays &); 

    friend class Overtime(const NumDays &); 
}; 

它似乎不喜歡我試圖在NUMDAYS傳遞對象進入加時賽類的構造函數,但是從我的理解,這是怎麼了它應該工作,因爲加班對象是與每個NumDays對象構建的

第二個問題是對於重載的操作符,我在解決這個問題時遇到了更少的麻煩,以及爲什麼必須特別實現它。

這是重載運算

/*overloading the + operator***************************************************/ 

NumDays NumDays::operator+ (const NumDays &right) 
{ 
    NumDays temp; 

    temp.hours = hours + right.hours; 
    return temp; 
} 

/*overloading the -operator***************************************************/ 

NumDays NumDays::operator- (const NumDays &right) 
{ 
    NumDays temp; 

    temp.hours = hours - right.hours; 
    return temp; 
} 

/*overloading the ++ operator**************************************************/ 

NumDays NumDays::operator++() 
{ 
    ++hours; 
    return *this; 
} 

/*overloading the << operator**************************************************/ 

void NumDays::operator<< (const NumDays &objOput) 
{ 
    cout << objOput.getWork << " days have been worked by this work"; 
} 

代碼這絕對不是< <超載的粉絲,但我基本上是複製的代碼直接從我的書,試圖做到這一點。

原始代碼鏈接被破壞,這是一個永久鏈接。 http://www.mediafire.com/file/j4q3fln9a8p98ll/dayCounter.zip

也稍微修復了我的代碼。不完美的工作,但它編譯和主要是工作。 http://www.mediafire.com/file/g5m21drbuab8tso/Lab5workCounter.zip

+0

'cout << objOput.getWork <<「天已被這個工作工作過了;'''''objOput.getWork'是一個函數。查看該行的任何內容是否有誤,如缺少括號? – PaulMcKenzie

+1

這不是一個'friend'聲明是如何工作的(既不是語法也不是wrt。語義),你不需要它。 –

+0

同意@ Cheersandhth.-Alf。再看看['朋友'聲明](http://en.cppreference.com/w/cpp/language/friend)。 –

回答

0
  1. 您似乎已將朋友類和朋友構造函數的語法結合在一起。 (目前尚不清楚,從你的包括代碼是否需要或者)
  2. NumDays沒有默認的構造函數,所以你不能讓一個然後設置其hours成員的運營商。
  3. 返回類型NumDays&operator++()。 (這只是「一個好主意;它不需要在此處進行任何其他代碼更改。)
  4. 不要將輸出operator<<定義爲類成員,因爲它應該採用std::ostream&第一個參數。
  5. 從PaulMcKenzie的評論:把()上你的方法調用。
  6. 從您的評論:永遠不要把using directive放在一個頭文件(函數或detail namespace內除外)。
+0

嘿,我真的很感激它。我確實做了一些更正,但我仍然有問題。我最終不得不按照「原樣」提交,但這裏是我能夠提交的州。我有一些奇怪但一致的行爲。編譯它並查看我的意思。 https://1drv.ms/u/s!AtYA5536lndTgaVWVBF-Nq3Ktr0RSA –