C ++ перегружен & lt; & lt; Оператор не выводит правильно, если я не включаю EndL

У меня довольно интересная проблема.

По сути, я перегружаю оператор вставки, чтобы вернуть строковое представление моего класса. Тем не менее, программа просто завершается, если я не включу std :: endl.

template<class T>
std::ostream& operator << (std::ostream& outs, const LinkedQueue<T>& q) {

outs << "queue[";

if (!q.empty()) {
outs << q.front->value;

for (auto i = ++q.begin(); i != q.end(); ++i)
outs << ',' << *i;
}
outs << "]:rear";

return outs;
}

int main() {
QueueType queueType1;
queueType1.enqueue("L");
std::cout << queueType1 << std::endl;
return 0;
}

Вышеуказанный main производит правильный вывод: queue [L]: Rear

Но если я уберу std::endl из основного программа ломается и ничего не выдает.

Я не могу включить endl в перегруженном методе, потому что он добавляет дополнительный символ в моей строке, что я не то, что. Какие-либо предложения?

3

Решение

Как подсказывает @samevarshavchik, используйте std::flush вместо std::endl для достижения желаемого результата. Это можно сделать в основном:

int main() {
QueueType queueType1;
queueType1.enqueue("L");
std::cout << queueType1 << std::flush;
/*^^^here^^^*/
return 0;
}

Или внутри вашей функции перегрузки:

template<class T>
std::ostream& operator << (std::ostream& outs, const LinkedQueue<T>& q) {

outs << "queue[";

if (!q.empty()) {
outs << q.front->value;

for (auto i = ++q.begin(); i != q.end(); ++i)
outs << ',' << *i;
}
outs << "]:rear" << std::flush;
/*^^^here^^^*/
return outs;
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector