2017-11-15 10 views
0

宿題プログラムの構文に問題があります。プロンプトは、それが適切にプログラムフラグメントを実行できるようにインサータをオーバーロードすることです:だから構造体のベクトルに<<をオーバーロードする方法

for (int i = 0; i < v.size(); ++i) cout << v[i] << endl; cout << endl;

を、これは私がこれまで持っているものですが、私はまだcoutの< <でエラーが出ますV [i]の声明(バイナリ式に無効なオペランド):

unsigned int seed; 
    struct node 
    { 
     int integer; 
     double value; 
    }; 

    double random(unsigned int &seed); 
    void initialize_vector(vector<node> &v); 
    template<typename T> 
    void print_vector(const vector<T> &v); 
    template<typename T> 
    ostream &operator <<(ostream &out, const vector<T> &v); 
    template<typename T> 
    void output(ostream &out, const vector<T> &v); 

    int main() 
    { 
     vector<node> v(10); 

     initialize_vector(v); 
     print_vector(v); 

     return 0; 
    } 

    double random(unsigned int &seed) 
    { 
     const int MODULUS = 15749; 
     const int MULTIPLIER = 69069; 
     const int INCREMENT = 1; 

     seed = ((MULTIPLIER * seed) + INCREMENT) % MODULUS; 

     return double(seed)/double(MODULUS); 
    } 

    void initialize_vector(vector<node> &v) 
    { 
     for (int i = 0; i < v.size(); ++i) 
     { 
      v[i].integer = int (11 * random(seed)); 
      v[i].value = double (11 * random(seed)); 
     } 
    } 

    template<typename T> 
    void print_vector(const vector<T> &v) 
    { 
     for (int i = 0; i < v.size(); ++i) 
      cout << v[i] << endl; 
     cout << endl; 
    } 

    template<typename T> 
    ostream &operator <<(ostream &out, const vector<T> &v) 
    { 
     output(out, v); 
     return (out); 
    } 

    template<typename T> 
    void output(ostream &out, const vector<T> &v) 
    { 
     cout << v.integer; 
     cout << setprecision(2) << fixed << setw(6) << v.value; 
    } 

私は最後の3つの機能のためのconst参照でとせずに渡すとともに、代わりにTの通過ノードを試してみたので、再び、私は私の構文を想定ボイド出力関数では何とか間違っています。正しい方向への助けや助言をいただければ幸いです。

*注:ostream &演算子関数を変更することはできません。

+3

のためにオペレータ< <をオーバーロードするために、1つ以上の機能を必要としています。 「ostreamと演算子の機能を変更できません」という意味はどうですか?私はあなたが 'operator <<(ostream&、foo)'関数を意味すると思いますか?既に_all_ベクトルのために変更/追加しています。なぜあなたは 'constノード 'を特化できないのですか? –

+1

ノードは 'ostream&operator <<(ostream&out、const node & n);' –

+0

@ Dththomhasです。私の教授が私のために提供したものなので、関数内のものは変更できません。 'テンプレート'を使用する必要はないでしょうか?そして@Aluanはそれが別の関数か、オリジナルの 'operator <<'関数を変更していますか? – minty59

答えて

2
cout << v[i] << endl; 

vはノードのベクトルである場合は、あなたが出力にどのように `node`タイプをコンピュータに語ったことがないノード

ostream &operator <<(ostream &out, const node &n) 
{ 
    out << n.interger << " " << n.value; 
    return out; 
} 
関連する問題