0
このヘッダーファイルにストリーム挿入演算子のオーバーロードに関する問題があります。コードをそのまま使用すると、タイトルにエラーメッセージが表示されます。しかし、私は、メインファイルに宣言を置く、それは正常に動作します。奇妙な宣言の動作:Rational.h:25:エラー: '&'トークンの前に予想されるコンストラクタ、デストラクタ、または型変換
Rational.h
#ifndef RATIONAL_H
#define RATIONAL_H
using namespace std;
class Rational{
private:
int numerator;
unsigned int denominator;
bool isNegative;
public:
Rational();
Rational(int);
Rational(int, int);
bool operator==(const Rational&);
Rational& operator++(int); //Unused int
Rational operator-(const Rational&);
Rational operator+(const Rational&);
Rational operator*(const Rational&);
Rational operator/(const Rational&);
};
ostream& operator<<(ostream&, Rational&); //Erroneous code
#endif
他の2つのファイル1.CとRational.c必要に応じて:
あなたは含める必要が#include "Rational.h"
#include <iostream>
#include <math.h>
using namespace std;
Rational::Rational(){
numerator = 0;
denominator = 1;
}
Rational::Rational(int num){
numerator = num;
denominator = 1;
}
Rational::Rational(int num, int den){
//Determine negativity
if(num < 0 xor den < 0){ //If negative
if(num > 0){
num *= -1;
}
}
numerator = num;
denominator = abs(den);
}
bool Rational::operator==(const Rational& rhs){
return (numerator/(double)denominator == rhs.numerator/(double)(rhs.denominator));
}
ostream& operator<<(ostream& os, Rational& input){
os << "Moo";
return os;
}
/*
private:
int numerator;
unsigned int denominator;
bool isNegative;
public:
Rational(int, int);
bool operator==(const Rational&);
Rational& operator++(int); //Unused int
Rational operator-(const Rational&);
Rational operator+(const Rational&);
Rational operator*(const Rational&);
Rational operator/(const Rational&);
*/
1.C
#include <iostream>
#include "Rational.h"
using namespace std;
int main(){
Rational test = Rational(2);
cout << test << endl;
}
ああ、これらの診断がどれほど役立つか。 –
ああ、ありがとう!私がそれについて知ったので、本当にばかな間違い。 – Saxophlutist