如何重载具有多个参数的函数? 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;