2013-04-30 14 views
7

私はいくつかの名前と年齢を取るいくつかのコードを持って、それらといくつかのものを行う。最終的にはそれらが印刷されます。 print()の機能をグローバルoperator<<に変更する必要があります。私はon a different forumを見ましたが、<<operatorは2つのパラメータを取ることがわかりましたが、試してみると "あまりにも多くのパラメータがあります。< <オペレーションエラーです。私は間違っていますか?私はC++の方が新しく、あなたはメンバ関数として<<演算子をオーバーロードしている。オペレータオーバーロードC++; <<操作のあまりにも多くのパラメータ

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

答えて

12

に過負荷をかけるので、最初のパラメータは、暗黙的に呼び出すオブジェクトです。

をあなたはfriend機能として、あるいは無料の機能としてそれをオーバーロードする必要がありどちらか。たとえば、 :

オーバーロードはfriendとして機能します。

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

しかし、標準的な方法は、free機能としてそれをオーバーロードすることです。あなたはこの投稿から非常に良い情報を見つけることができます: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; 
} 
関連する問題