它不知道如何顯示分數,補充一點:
std::ostream& operator<<(std::ostream& stream, const Fraction& frac) {
stream<<"Do something with frac here, like output num/denom\n";
return stream;
}
雖然不抱怨你的cout行了,它會在你修復這個錯誤,因爲它不不知道如何在std :: ostream和Fraction上執行< <。
不是這個 - 從原來的答案
你的錯誤可能是那些「用在這裏」的錯誤標誌之一,它告訴你它在哪裏糊塗了,它可能試圖打印壓裂爲int .. ..是的。
實際ANSWER
當你說Fraction A = B*C;
編譯器看到的像Fraction A = AnotherFraction;
它可以做Fraction A;
(默認構造函數),其次是Fraction::operator=(Fraction&);
或者它可以從臨時使用在這種情況下的R值(移動分配)你回來。 C++允許一個級別的隱式轉換,在某處你有「Fraction :: Fraction(int);」 - 一個接受int的構造函數,C++想要將你的Fraction轉換爲一個int,並用該int構造一個新的Fraction。
它在抱怨,因爲它不能。給它一個拷貝構造函數,參見3的規則(現在的規則爲5),你應該總是擁有你的賦值操作符和拷貝構造函數,不要只有一個(沒有很好的理由),並且使用C++ 11賦值r運算符和「」構造函數。
在結束
,我們需要你的構造函數,即內隱鑄造一個級別是給你出現奇怪的錯誤,因爲「爲什麼INT」,但由於某種原因,C++要用分數::分數(INT) ,這我知道,從你所說的存在,這是不高興,因爲它不能去fraction-> INT(做就是了fraction->內部 - >部分)
注意
這是爲什麼C++有一個沉重的學習曲線,因爲它如此強大L(它與內隱的轉換確實是毫無疑問的好事!)你可以得到告訴你更多的地方得到了比什麼其實是錯誤的混淆錯誤。就像當你有一個運營商< <有一個錯字,並嘗試將其匹配的標準算< <的一個,你就像一個4頁的原因,爲什麼你說的是錯的,它怎麼能不實例化一個特定的(與人類觀點無關)模板。
附錄
template<class T>
class Ratio {
public:
Ratio(): top(0), bottom(1) {}
Ratio(T& from): top(from), bottom(1) {}
Ratio(T& top, T& bottom): top(top), bottom(bottom) {}
Ratio(T&& from): top(from), bottom(1) {}
Ratio(T&& top, T&& bottom): top(top), bottom(bottom) {}
Ratio& operator=(Ratio& from) {
top = from.top;
bottom = from.bottom;
}
Ratio& operator=(Ratio&& from) {
top = from.top;
bottom = from.bottom;
}
Ratio(const Ratio& from): top(from.top), bottom(from.bottom) {}
Ratio(Ratio&& from): top(from.top), bottom(from.bottom) {}
~Ratio() {}
const T& getTop() const { return top; }
const T& getBottom() const { return bottom; }
T& getTop() { return top; }
T& getBottom() { return bottom; }
Ratio operator*(const Ratio& rhs) const { //we are the left hand side
T newTop = rhs.top*this->top;
T newBottom = rhs.bottom*this->bottom;
Ratio result(newTop,newBottom);
return result;
}
private:
T top;
T bottom;
};
template<class T>
std::ostream& operator<<(std::ostream& stream, const Ratio<T>& ratio) {
stream<<ratio.getTop()<<"/"<<ratio.getBottom();
return stream;
}
typedef Ratio<int> Fraction;
int main(int,char**) {
Fraction a;
std::cout<<"A: "<<a<<"\n";
Fraction b(1);
std::cout<<"B: "<<b<<"\n";
Fraction c = a*b;
std::cout<<"A*B=C: "<<c<<"\n";
Fraction d(5,3);
std::cout<<"Look! "<<d*d<<"\n";
return 0;
}
這一工程!
我竭力要看看如何代碼可能產生誤差。 – john
我看不到這段代碼失敗。你可以告訴我們你的構造函數'Fraction(int,int)'嗎? – 0x499602D2
我們需要看'Fraction.h'。 –