Хотя @BoPersson уже дал вам решение, я хотел бы объяснить, что здесь произошло, и почему ваш вывод пустой, даже если вы добавляете к ostringstream
в строке непосредственно перед отображением ее содержимого.
Я думаю, что когда вы пытались вернуть mInfoLogger
по значению, компилятор жаловался на невозможность вернуть его, поскольку конструктор копирования был удален.Причина, по которой он был удален, потому что ostringstream
член, который у вас есть, не подлежит копированию.
Итак, вы предоставили пользовательский конструктор копирования и попытались скопировать поток следующим образом:
this->mBuf << otherLogger.mBuf.rdbuf();
Только это делаетне копируйте ничего, так как ваш rdbuf
пуст и вместо этого устанавливает failbit
в
бит перехода
Перегрузка потока потока при использовании basic_ostream :: operator <<если функция не вставляет никаких символов.<a href="http://en.cppreference.com/w/cpp/io/ios_base/iostate" rel="nofollow noreferrer">http://en.cppreference.com/w/cpp/io/ios_base/iostate
Если бы вы проверяли вставку вашего сообщения следующим образом:
if (!(mBuf << msg))
std::cout << "Not Inserted" << std::endl;
Вы бы увидели Not Inserted
сообщение напечатанным.Есть много способов заставить его напечатать нужное сообщение.Например, убедитесь, что ваш буфер rdbuf
не пуст, или сбросьте failbit
перед повторным использованием mBuf
, что-то вроде mBuf.clear();
, или просто верните ссылку на mInfoLogger
(и mErrorLogger
).Тогда вы можете безопасно избавиться от вашего конструктора копирования.