2016-04-06 15 views
0

私はEntrepreneurクラスのストリーム挿入と抽出演算子の両方をオーバーロードしようとしています。オーバーロードストリームの挿入と抽出演算子

int main() { 
    Entrepreneur Group3; 
    cin >> Group3; 
} 

:私は、次のコードをしようとしている、私のmain.cppにファイルで

friend istream& Entrepreneur::operator>> (istream &input, Entrepreneur &entrepreneur) { 
    cout << "Please enter the item to be sold: "; 
    input >> entrepreneur.Item; 
    cout << "\nPlease enter the donation amount received: "; 
    input >> entrepreneur.Donation; 
    cout << "\nPlease enter the amount of members in the group: "; 
    input >> entrepreneur.Nr; 
    cout << "\nPlease enter the startup amount received: "; 
    input >> entrepreneur.StartupAmt; 
    cout << endl; 
    return input; 
} 

friend ostream& Entrepreneur::operator<< (ostream &output, Entrepreneur &entrepreneur) { 
    output << "Item: " << entrepreneur.Item << endl; 
    output << "Members in group: " << entrepreneur.Nr << endl; 
    output << "Startup amount: " << entrepreneur.StartupAmt << endl; 
    output << "Donation amount: " << entrepreneur.Donation << endl; 
    output << "Expenses: " << entrepreneur.Expenses << endl; 
    output << "Points earned: " << entrepreneur.Points << endl; 
    output << "All items sold: " << entrepreneur.Sold ? "Yes" : "No" << endl; 
    return output; 
} 

:私は私の起業家クラスに以下の持っている

コードをコンパイルできません。あなたたちは助けてください

バイナリ演算子「は>>」タイプの式「はistream」と「起業家」

に適用することができない:私は次のエラーメッセージを取得しています私は上記のコードで何が間違っているのか理解していますか?

+0

助けてくれてありがとうございました。私はそれを受け入れることができるように答えとして投稿してください! –

+1

これはあなたにいくつかの追加説明を与える必要があります:http://stackoverflow.com/questions/236801/should-operator-be-implemented-as-a-friend-or-as-a-member-function – Christophe

答えて

1

署名が間違っています。非メンバ関数を宣言/定義したいので、あなたは友人を使用しています。 Enterpreneur::を削除すると、問題は解決します。

クラスの定義は次のようになります。

class Enterpreneur 
{ 
public: 
    ... 

    friend istream& operator>> (istream &input, Entrepreneur &entrepreneur); 
    friend ostream& operator<< (ostream &output, Entrepreneur const& entrepreneur); 
    //              ^^^^^ 
    //         we're not modifying the argument, are we? 
}; 

をし、その後も他の非メンバ関数(なしfriendキーワード)として、これらの演算子を定義、またはクラスにインラインでそれらを定義します。

+0

助けをありがとう。それは今コンパイルされますが、今このエラーメッセージが表示されています:クラスの外で使用された「友人」 –

+0

@Henry編集を参照してください。 – LogicStuff

+1

ありがとうございました! –