私が「保護」で、次のコード行が含まれている「クライアント」という名前のクラス 、から継承された「加入者」という名前のクラスを、持っている:"this"はconstですが、std:ostream&memberで正しく使用するには?
std::ostream& messagesSink;
std::ostream& getMessagesSink() {
return messagesSink;
}
(messagesSinkはコンストラクタで初期化されます加入者の)
と、以下の機能-メンバーは「加入者」であり:
virtual void recieveMessage(const std::string& message ,
const Topic& topic,
const Client& client) const {
messagesSink << "Topic: "<< topic
<< ". Sender: #" << client.getId() << ". Reciver: #"
<< getId() << ".Message: " << message;
}
問題はこのように書きます:彼の現在の状態では、コードはコンパイルエラーがなく、私ならば
virtual void recieveMessage(const std::string& message ,
const Topic& topic,
const Client& client) const {
getMessagesSink() << "Topic: "<< topic
<< ". Sender: #" << client.getId() << ". Reciver: #"
<< getId() << ".Message: " << message;
}
私の質問は以下のとおりです:
1)diffrenceは前と後とするものです以下のコードは、コンパイル・エラーが表示されているとおり、機能getMessagesSink()のメンバーmessagesSinkの使用を置き換えますか?
2) "this"をconstとして保持する関数で、std :: ostreamへの参照を正しく使用する方法?
私はgetMessagesSinkの戻り値を "const std :: ostream&"に変更しようとしましたが、 "const char *"からint、long int、long long intなどの無効な変換の複雑なエラーに繋がります。私は理解していません。なぜ、コンパイラは "int"型の変数を期待していますか?関数を介してostream型のオブジェクトを渡す方法はありますか? –
ああ、答えに感謝します! –
これは問題をうまく説明していますが、解決策を提案していません。 –