I have some code below that will take some names and ages and do some stuff with them. Eventually it will print them out. I need to change my print() function with a global operator<<. I saw on a different forum that <<operator takes two parameters, but when I try it I get a "too many parameters for << operation error. Is there something I am doing wrong? I am newer to C++ and I really do not get the point of operator overloading.

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

2 Answers

You are overloading << operator as a member function, therefore, the first parameter is implicitly the calling object.

You should either overload it as friend function or as a free function. For example:

overloading as friend function.

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

However, the canonical way is to overload it as free function. You can find very good information from this post: C++ operator overloading

1

declare operator overloading function as friend.

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

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.