У меня есть класс с именем «Абонент», который наследуется от класса с именем «Клиент», который содержит следующие строки кода, в «защищенный»:Как правильно использовать использование в std: ostream & member, а «this» - const?
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;
}
проблема выглядит следующим образом: в его текущем состоянии, код не содержит ошибок компиляции, но если я заменить использование messagesSink члена в функции getMessagesSink(), так как код ниже, появляется ошибка компиляции:
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), что является разностное между до и после?
2) как правильно использовать refrence для std :: ostream, а в функции, которая сохраняет это «как const»?
Я попытался изменить возвращаемое значение getMessagesSink на «const std :: ostream &», но это просто приводит к ошибкам усложнения неверного преобразования из «const char *» в int, long int, long long int и так далее вперед, и я не понимаю, что ... зачем компилятор ожидает переменную типа «int»? есть способ передать объект типа ostream через функцию? –
ой, и спасибо за ответ! –
Это хорошо объясняет проблему, но не позволяет предложить решение. –