2017-10-21 77 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 –