這在Visual Studio 2015中運行良好,但在使用MinGw時無法正常運行。爲什麼?如何解決它?代碼有什麼問題?
錯誤信息:
敵不過 '運算< <'(操作數的類型是 '的std :: ostream的{又名的std :: basic_ostream}' 和 '分數')werjiorqq.cpp/werjiorqq/SRC線106 C/C++問題
敵不過 '運算< <'(操作數的類型是 '的std :: ostream的{又名的std :: basic_ostream}' 和 '分數')werjiorqq.cpp/werjiorqq/SRC線107c中/ C++問題
'operator'不匹配<'(操作數的類型是 '的std :: ostream的{又名的std :: basic_ostream}' 和 '分數')werjiorqq.cpp/werjiorqq/SRC線108 C/C++問題
敵不過 '運算< <' (操作數類型是'std :: ostream {aka std :: basic_ostream}和'Fraction')werjiorqq.cpp/werjiorqq/src line 109 C/C++問題
沒有匹配函數調用'Fraction :: Fraction分數)」 werjiorqq.cpp/werjiorqq/SRC線71 C/C++問題
爲調用沒有匹配的函數 '分數::分數(分數)' werjiorqq.cpp/werjiorqq/SRC線88 C/C++問題
#include <iostream>
#include <cmath>
using namespace std;
int gcd(int m, int n) {
if (m%n == 0)
return n;
else
return gcd(n, m%n);
}
int preGcd(int m, int n) {
int absm = abs(m);
int absn = abs(n);
int g = gcd(absm, absn);
return g;
}
class Fraction {
int m, n;
public:
Fraction() {
}
Fraction(Fraction& f) {
m = f.getM();
n = f.getN();
}
Fraction(int m, int n) {
this->m = m;
this->n = n;
}
friend ostream& operator<< (ostream& out,Fraction& f) {
cout << f.m << '/' << f.n << endl;
return out;
}
int getM() {
return m;
}
int getN() {
return n;
}
void reduction() {
int g;
if (n > m)
g = preGcd(n, m);
else
g = preGcd(m, n);
m /= g;
n /= g;
}
friend Fraction operator+ (Fraction f1,Fraction f2) {
int nn = f1.n*f2.n;
int nm = f1.m*f2.n + f2.m*f1.n;
Fraction *p = new Fraction(nm, nn);
p->reduction();
return *p;
}
friend Fraction operator- (Fraction f1, Fraction f2) {
f2.m = (-f2.m);
return operator+ (f1, f2);
}
friend Fraction operator* (Fraction f1, Fraction f2) {
/*cout << f1;
cout << f2;*/
int nn = f1.n*f2.n;
int nm = f1.m*f2.m;
Fraction *p = new Fraction(nm, nn);
p->reduction();
return *p;
}
friend Fraction operator/ (Fraction f1, Fraction f2) {
int temp = f2.m;
f2.m = f2.n;
f2.n = temp;
return operator*(f1, f2);
}
void revenue() {
cout << n << '/' << m << endl;
}
};
int main() {
int a, b, c, d;
cin >> a >> b >> c >> d;
Fraction f1(a, b);
Fraction f2(c, d);
cout << f1 + f2;
cout << f1 - f2;
cout << f1*f2;
cout << f1/f2;
f1.revenue();
}
這是個錯誤VS。在'operator <<'的定義中將'Fraction&'更改爲'const Fraction&'。 –
這不是一個錯誤。這是一個編譯器擴展。如果你想讓編譯器報告錯誤,你可以傳遞'/ we4239'來專門禁用該擴展。或者你可以傳遞'/ Za'來禁用所有擴展。 –