Ich habe eine Klasse mit dem Namen „Teilnehmer“, die von einer Klasse geerbt wird namens „Client“, die die folgenden Codezeilen enthalten, in „geschützten“:wie verwendet man richtig in std: ostream & member, während "dies" ist ein const?
std::ostream& messagesSink;
std::ostream& getMessagesSink() {
return messagesSink;
}
(messagesSink im Konstruktor initialisiert von Abonnenten)
und es gibt die folgende Funktion-Mitglied in „Teilnehmer“:
virtual void recieveMessage(const std::string& message ,
const Topic& topic,
const Client& client) const {
messagesSink << "Topic: "<< topic
<< ". Sender: #" << client.getId() << ". Reciver: #"
<< getId() << ".Message: " << message;
}
das Problem so geht: in seinem aktuellen Zustand, der Code keine Kompilierungsfehlern hat, aber wenn ich ersetzen Sie die Verwendung des Elements messagesSink in der Funktion getMessagesSink(), wie der folgende Code, Kompilierungsfehlern erscheint:
virtual void recieveMessage(const std::string& message ,
const Topic& topic,
const Client& client) const {
getMessagesSink() << "Topic: "<< topic
<< ". Sender: #" << client.getId() << ". Reciver: #"
<< getId() << ".Message: " << message;
}
meine Fragen sind:
1), was die diffrence zwischen vor und nach?
2) Wie man den Verweis auf std :: ostream richtig verwendet, während in einer Funktion, die "das" als const hält?
Ich habe versucht, den Rückgabewert von getMessagesSink zu "const std :: ostream &" zu ändern, aber es führt nur zu Komplikationsfehlern der ungültigen Konvertierung von "const char *" zu int, long int, long long int und so her, und das verstehe ich auch nicht .. warum erwartet der Compiler eine Variable vom Typ "int"? Gibt es eine Möglichkeit, das Ostream-Objekt durch eine Funktion zu übergeben? –
oh, und danke für die Antwort! –
Das erklärt das Problem gut, aber vermisst eine Lösung vorzuschlagen. –