在C ++中添加两个对象(运算符重载)

时间:2014-03-06 22:33:59

标签: c++

我只是想知道是否有人可以指出我遇到的问题。

我有三个文件:main.cpp / Fraction.cpp / Fraction.h

以下是相关的Fraction.h(类)信息:

class Fraction{


//Variables

    int numerator;
    int denominator;

};

在main.cpp中,我声明了一些对象:

Fraction left, right, result, ref;

然后尝试将它们添加到一起:

result = left + right;

然后在我的Fraction.cpp文件中(我知道它不应该在哪里)是我的运算符重载函数:

Fraction& operator+(const Fraction& l, const Fraction& r){

 Fraction sum;

 int numSum, denSum;

 numSum = l.numerator2() + r.numerator2(); // these functions get the values

 denSum = l.denominator2() + r.denominator2(); // these functions get the values

 sum.set(numSum, denSum);

 return sum;

}

发生以下错误,告诉我没有函数匹配main中的表达式:

w6.cpp:29:20: error: invalid operands to binary expression ('Fraction' and 'Fraction')
 result = left + right;

有没有人知道为什么会这样?谢谢!

3 个答案:

答案 0 :(得分:1)

您必须declare标头中的重载,并在cpp文件中define。例:

MyHeader.h:

Fraction& operator+(const Fraction& l, const Fraction& r);

MYFILE.CPP:

Fraction& operator+(const Fraction& l, const Fraction& r){
 // ...

答案 1 :(得分:0)

我认为编译器不知道你重载了+运算符。您需要在(Fraction.h)头文件中声明它:

Fraction& operator+(const Fraction& l, const Fraction& r);

答案 2 :(得分:0)

似乎有两个问题。带有main的文件确实可以看到运算符的声明。您必须在标头中包含声明。 第二个问题是操作员定义不正确。它具有未定义的行为,因为您返回对本地对象的引用。

按以下方式更改

const Fraction operator+(const Fraction& l, const Fraction& r){

   return Fraction(  l.numerator2() + r.numerator2(), l.denominator2() + r.denominator2() );
}