2016-04-06 6 views
0

Ich versuche, sowohl die Stream-Insertion und Extraktion Operator für meine Entrepreneur Klasse zu überlasten. die folgenden in meinem Entrepreneur KlasseOverload-Stream-Insertion und Extraktion Operator

Ich habe:

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; 
} 

In meiner main.cpp-Datei, ich den folgenden Code versuchen:

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

Die Code kann nicht kompiliert werden. Ich erhalte die folgende Fehlermeldung:

Binary Operator ‚>>‘ kann nicht auf den Ausdruck des Typs ‚istream‘ und ‚Unternehmer‘

Können Sie Kerle angewendet werden bitte helfen ich, um herauszufinden, was mit dem oben genannten Code falsch ist?

+0

Super danke für die Hilfe. Kannst du es bitte als Antwort posten, damit ich es annehmen kann! –

+1

Dies sollte Ihnen einige zusätzliche Erklärungen geben: http://stackoverflow.com/questions/236801/should-operator-be-implemented-as-a-friend-or-as-a-member-function – Christophe

Antwort

1

Die Signaturen sind falsch. Du verwendest freunde, weil du Nichtmitgliedsfunktionen deklarieren/definieren willst. Lassen Sie die Enterpreneur:: fallen und das Problem ist gelöst.

Die Klasse Definition sollte ungefähr so ​​aussehen:

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? 
}; 

und definieren Sie dann nur diejenigen Betreiber, wie jede andere nicht-Member-Funktion (kein friend Schlüsselwort), oder sie definieren inline mit der Klasse.

+0

Danke für die Hilfe. Es kompiliert jetzt, aber ich bekomme diese Fehlermeldung jetzt: "Freund" außerhalb der Klasse verwendet –

+0

@Henry Siehe die Bearbeitung. – LogicStuff

+1

Danke, dass es jetzt funktioniert! –