2016-03-06 162 views
-1

我正在一類分數與全局函數用法 我的代碼看起來像下面:C++:錯誤而C++程序編譯

#include<iostream> 
using namespace std; 

ostream & operator<<(ostream & os, Fraction & fr) 
{ 
    return os << fr.get_num() << '/' << fr.get_den(); 
} 

class Fraction 
{ 
private: 
    int num, den; 
public: 
int get_num() 
    { 
     return num; 
    } 
    int get_den() 
    { 
     return den; 
    } 
}; 

主要功能有呼叫:'清點< < F2 < < ENDL;
但我得到以下建立誤差修改而編譯:
錯誤C2805二進制「操作< <」太少參數
FR:未聲明的標識符
get_num的 左側必須結構/聯合/類

+1

這是你得到的唯一錯誤?當您定義'operator <<'函數時,沒有關於'Fraction'未聲明的內容?你知道在C++中你必須在使用它們之前聲明符號嗎? –

+1

可能的重複http://stackoverflow.com/questions/23335209/error-overloaded-operator-must-be-a-binary-operator-has-3-parameters – Learner

+1

你也應該通過const reference參考 –

回答

1

你應該改變你的代碼的順序是這樣的:

class Fraction 
{ 
private: 
    int num, den; 
public: 
int get_num() 
    { 
     return num; 
    } 
    int get_den() 
    { 
     return den; 
    } 
}; 

ostream & operator<<(ostream & os, Fraction & fr) 
{ 
    return os << fr.get_num() << '/' << fr.get_den(); 
}