Operator overbelast C++; te veel parameters voor << bediening

Ik heb hieronder een code die een aantal namen en leeftijden nodig heeft en er wat dingen mee kan doen. Uiteindelijk zal hij ze uitprinten. Ik moet mijn functie print()wijzigen met een algemene operator<<. Ik zag op een ander forumdat <<operatorheeft twee parameters nodig, maar als ik het probeer, krijg ik een “te veel parameters voor << bedieningsfout. Is er iets dat ik verkeerd doe? Ik ben nieuwer in C++ en ik begrijp echt niet dat de operator overbelast is.

#include <iostream>;
#include <string>;
#include <vector>;
#include <string.h>;
#include <fstream>;
#include <algorithm>;
using namespace::std;
class Name_Pairs{
    vector<string> names;
    vector<double> ages;
public:
    void read_Names(/*string file*/){
        ifstream stream;
        string name;
        //Open new file
        stream.open("names.txt");
        //Read file
        while(getline(stream, name)){   
            //Push
            names.push_back(name);
        }
        //Close
        stream.close();
    }
    void read_Ages(){
        double age;
        //Prompt user for each age
        for(int x = 0; x < names.size(); x++)
        {
            cout << "How old is " + names[x] + "?  ";
            cin >> age;
            cout<<endl;
            //Push
            ages.push_back(age);
        }
    }
    bool sortNames(){
        int size = names.size();
        string tName;
        //Somethine went wrong
        if(size < 1) return false;
        //Temp
        vector<string> temp = names;
        vector<double> tempA = ages;
        //Sort Names
        sort(names.begin(), names.end());
        //High on performance, but ok for small amounts of data
        for (int x = 0; x < size; x++){
            tName = names[x];
            for (int y = 0; y < size; y++){
                //If the names are the same, then swap
                if (temp[y] == names[x]){
                    ages[x] = tempA[y];
                }
            }
        }
    }
    void print(){
        for(int x = 0; x < names.size(); x++){
            cout << names[x] << " " << ages[x] << endl;
        }
    }
    ostream& operator<<(ostream& out, int x){
        return out << names[x] << " " << ages[x] <<endl;
    }
};

Antwoord 1, autoriteit 100%

U overbelast de operator <<als lidfunctie, daarom is de eerste parameter impliciet het aanroepende object.

Je moet het ofwel overbelasten als friend-functie of als een gratis functie. Bijvoorbeeld:

overbelasting als friendfunctie.

friend ostream& operator<<(ostream& out, int x){
     out << names[x] << " " << ages[x] <<endl;
     return out;
}

De canonieke manier is echter om het te overbelasten als free-functie. Je kunt zeer goede informatie vinden in dit bericht: C++ operator overbelasting


Antwoord 2, autoriteit 16%

verklaar de overbelastingsfunctie van de operator als vriend.

friend ostream& operator<<(ostream& out, int x)
{
        out << names[x] << " " << ages[x] <<endl;
        return out;
}

Other episodes