我只是想知道是否有人可以指出我遇到的问题。
我有三个文件: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;
有没有人知道为什么会这样?谢谢!
答案 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() );
}