2017-06-19 10 views
1

メッセージのベクトルを持つクラスを作成しました。インデックスとメッセージを新しい行に出力するようにostream演算子をオーバーロードする必要があります。私は、あらかじめ決められた1行しか出力していないたくさんの例を見てきましたが、問題は私のベクトルがどれくらい大きいか分かりません。ostream演算子をベクトルでオーバーロードする

私はこのような何かを探しています:

my_message.messages = {"line 1", "line 2", "line 3"}; 
cout<<my_message<<endl; 

出力:以下のようなclass MY_MESSAGESために

Message Contents: 
01: Line 1 
02: Line 2 
03: Line 3 
+0

[mcve]を提供してください。「my_message」は何ですか?また、あなたがすでに試したことと失敗したことを書き留めてください –

答えて

-1

過負荷operator <<。 次に、オーバーロードされた演算子関数の中で、メッセージvectorを反復し、個々のメッセージを出力します。

std::ostream& operator <<(std::ostream& o, class MY_MESSAGES my_message) 
{ 
    int size = my_message.messages.size(); 

    o << Message Contents: << std::endl; 

    for(int i = 0;i < size; i++) 
    { 
     o << i+1 << my_message.messages[i] << std::endl; 
    } 
    return o; 
} 
0

std::vector我々はこのように書くことができ、このvector.Soのサイズを返すことができsize()という名前のメソッドを持っています

class my_message 
{ 
    friend std::ostream &operator<<(std::ostream &os, my_message &c); 
    public: 
     my_message(std::vector<std::string> v) :messages(v) {} 
    private: 
     std::vector<std::string> messages; 
}; 

std::ostream &operator<<(std::ostream &os, my_message &c) 
{ 
    for(std::size_t index = 0; index < c.messages.size(); ++index) 
     os << index <<": " << c.messages[index] << std::endl; 
    return os; 
} 

my_message.messagesがプライベートの場合、std::ostream &operator<<(std::ostream &, my_message)my_messageの友人のメンバーである必要があります。

関連する問題