如何重载具有多个参数的函数? C++
How to Overload functions with multiple parameters? C++
我的问题是关于硬件分配的。我试过 google,联系我的老师(从未回应),没有解决办法。
基本上我需要在头文件中重载一个有两个参数的函数。
与此非常相似 -> Operator(s) too many parameters for this function?
但出于某种原因,当我添加朋友时,它无法编译。
这是我需要重载的函数之一。
Rational.cpp
bool reduceFractions(numbers &fractions) {
bool answer;
for (int i = fractions.numerator; i >= 2; i--) { //This will keep running until i = the GFC for both numerator & denominator
if ((((fractions.numerator % i) == 0) && (fractions.denominator % i) == 0)) {
fractions.numerator /= i;
fractions.denominator /= i;
answer = true;
}
}
answer = false;
return answer;
}
//Adding fractions
numbers operator+(numbers firstFraction, numbers secondFraction) {
numbers holdFraction1, holdFraction2, someAnswers;
//Multiply to get same denominator
holdFraction1.denominator = firstFraction.denominator * secondFraction.denominator;
holdFraction2.denominator = firstFraction.denominator * secondFraction.denominator;
//Numerator multiplication to match new denominator
holdFraction1.numerator = firstFraction.numerator * secondFraction.denominator;
holdFraction2.numerator = secondFraction.numerator * firstFraction.denominator;
//Adding the fractions
someAnswers.numerator = holdFraction1.numerator + holdFraction2.numerator;
someAnswers.denominator = holdFraction2.denominator;
//Reduce fractions
while (reduceFractions(someAnswers));
return someAnswers;
}
istream& operator >> (istream &in, numbers &fraction) {
char slash;
return in >> fraction.numerator >> slash >> fraction.denominator;
}
ostream& operator << (ostream& out, numbers fraction) {
return out << fraction.numerator << "/" << fraction.denominator;
}
Rational.h
##ifndef Rational
#define Rational
struct numbers {
int numerator;
int denominator;
};
class Math
{
private:
numbers first, second;
public:
Math();
friend numbers operator+(numbers firstFraction, numbers secondFraction);
friend istream& operator >>(istream& in, numbers& fraction);
friend ostream& operator<< (ostream& out, numbers fraction);
};
#endif
Driver.cpp主要来了
#include <iostream>
using namespace std;
#include "Rational.h"
int main() {
numbers firstFraction, secondFraction, answerFraction;
cout << "Enter first fraction (format a/b)";
cin >> firstFraction;
cout << "Enter second fraction (format a/b)";
cin >> secondFraction;
answerFraction = firstFraction + secondFraction;
cout << answerFraction;
system("Pause");
return 0;
}
^^^好像没有重载函数。给我一个编译错误。
我收到这个错误和其他几个错误
Error 1 error LNK2005: "struct numbers __cdecl operator+(struct numbers &,struct numbers &)" (??H@YA?AUnumbers@@AAU0@0@Z) already defined in Driver.obj C:\Users\JeanLuis\Documents\Visual Studio 2013\Projects\Project1\Project1\Rational.obj Project1
如果我带走 朋友
它告诉我参数太多...
我究竟做错了什么?
希望我说得更清楚一点。
所以,我猜这是因为您的签名不匹配。
你有:
friend numbers operator+(numbers firstFraction, numbers secondFraction);
friend istream& operator >>(istream& in, numbers& fraction);
friend ostream& operator<< (ostream& out, numbers fraction);
但你的实际功能是:
numbers operator+(numbers &firstFraction, numbers &secondFraction) // BAD
istream& operator >> (istream &in, numbers &fraction) // GOOD
ostream& operator << (ostream& out, numbers &fraction) // BAD
注意到引用运算符不匹配了吗?修复它,看看是否可以编译。像所示的奇怪的复杂错误通常是由签名不匹配等问题引起的。
编辑与评论相关的内容
.h加法
#include <iostream>
using namespace std;
.cpp加法
#include "test2.h"
#include <iostream>
using namespace std;
我的问题是关于硬件分配的。我试过 google,联系我的老师(从未回应),没有解决办法。
基本上我需要在头文件中重载一个有两个参数的函数。
与此非常相似 -> Operator(s) too many parameters for this function?
但出于某种原因,当我添加朋友时,它无法编译。
这是我需要重载的函数之一。
Rational.cpp
bool reduceFractions(numbers &fractions) {
bool answer;
for (int i = fractions.numerator; i >= 2; i--) { //This will keep running until i = the GFC for both numerator & denominator
if ((((fractions.numerator % i) == 0) && (fractions.denominator % i) == 0)) {
fractions.numerator /= i;
fractions.denominator /= i;
answer = true;
}
}
answer = false;
return answer;
}
//Adding fractions
numbers operator+(numbers firstFraction, numbers secondFraction) {
numbers holdFraction1, holdFraction2, someAnswers;
//Multiply to get same denominator
holdFraction1.denominator = firstFraction.denominator * secondFraction.denominator;
holdFraction2.denominator = firstFraction.denominator * secondFraction.denominator;
//Numerator multiplication to match new denominator
holdFraction1.numerator = firstFraction.numerator * secondFraction.denominator;
holdFraction2.numerator = secondFraction.numerator * firstFraction.denominator;
//Adding the fractions
someAnswers.numerator = holdFraction1.numerator + holdFraction2.numerator;
someAnswers.denominator = holdFraction2.denominator;
//Reduce fractions
while (reduceFractions(someAnswers));
return someAnswers;
}
istream& operator >> (istream &in, numbers &fraction) {
char slash;
return in >> fraction.numerator >> slash >> fraction.denominator;
}
ostream& operator << (ostream& out, numbers fraction) {
return out << fraction.numerator << "/" << fraction.denominator;
}
Rational.h
##ifndef Rational
#define Rational
struct numbers {
int numerator;
int denominator;
};
class Math
{
private:
numbers first, second;
public:
Math();
friend numbers operator+(numbers firstFraction, numbers secondFraction);
friend istream& operator >>(istream& in, numbers& fraction);
friend ostream& operator<< (ostream& out, numbers fraction);
};
#endif
Driver.cpp主要来了
#include <iostream>
using namespace std;
#include "Rational.h"
int main() {
numbers firstFraction, secondFraction, answerFraction;
cout << "Enter first fraction (format a/b)";
cin >> firstFraction;
cout << "Enter second fraction (format a/b)";
cin >> secondFraction;
answerFraction = firstFraction + secondFraction;
cout << answerFraction;
system("Pause");
return 0;
}
^^^好像没有重载函数。给我一个编译错误。
我收到这个错误和其他几个错误
Error 1 error LNK2005: "struct numbers __cdecl operator+(struct numbers &,struct numbers &)" (??H@YA?AUnumbers@@AAU0@0@Z) already defined in Driver.obj C:\Users\JeanLuis\Documents\Visual Studio 2013\Projects\Project1\Project1\Rational.obj Project1
如果我带走 朋友 它告诉我参数太多...
我究竟做错了什么?
希望我说得更清楚一点。
所以,我猜这是因为您的签名不匹配。
你有:
friend numbers operator+(numbers firstFraction, numbers secondFraction);
friend istream& operator >>(istream& in, numbers& fraction);
friend ostream& operator<< (ostream& out, numbers fraction);
但你的实际功能是:
numbers operator+(numbers &firstFraction, numbers &secondFraction) // BAD
istream& operator >> (istream &in, numbers &fraction) // GOOD
ostream& operator << (ostream& out, numbers &fraction) // BAD
注意到引用运算符不匹配了吗?修复它,看看是否可以编译。像所示的奇怪的复杂错误通常是由签名不匹配等问题引起的。
编辑与评论相关的内容
.h加法
#include <iostream>
using namespace std;
.cpp加法
#include "test2.h"
#include <iostream>
using namespace std;