제 질문은 HW 할당에 관한 것입니다. 나는 해결책없이 선생님에게 연락하여 (응답하지 않음) Google을 시도했습니다.
기본적으로 헤더 파일에 두 개의 매개 변수가있는 함수를 오버로드해야합니다.
이것과 매우 유사합니다.-> 연산자가이 함수에 너무 많은 매개 변수를 사용합니까?
하지만 어떤 이유로 친구를 추가하면 컴파일되지 않습니다.
여기에 과부하가 필요한 기능 중 하나가 있습니다.
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;
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다