Mam pytanie odnośnie c++. Piszę klasę która tworzy interfejs pomiędzy konsolą i resztą kodu który napisałem. Mam klasę w której znajduje się zmienna składowa
std::ostream *outputStream;
Problem polega na tym, że czasami linijka
*outputStream << "This command does not exist" << std::endl;
zachowuje się, jakby outputStream nie został sflushowany mimo "std::endl" na końcu. To jest wypisuje się razem z wyjściem innych obsługi innych poleceń wczytanych z klawiatury. Co więcej nie działa również używanie funkcji "flush()". Nie wszystkie wypisania zachowują się w taki sposób. Dotyczy on wyłącznie krótszych bloków np:
else
*outputStream << "This command does not exist" << std::endl;
zachowuje się jakby nie była flushowana. Natomiast
else if (arguments[0] == "setRadius") {
try {
findByName(arguments[1]).setRadius(std::stod(arguments[2]));
}
catch(std::string err_txt) {
*outputStream << err_txt;
}
}
działa poprawnie. Skończyły mi się pomysły na rozwiązanie tego problemu, szukałem w internecie (najwidoczniej zbyt krótko). Wydaje mi się, że może to mieć związek z tym, że jest to wskaźnik do strumienia a nie jego referencja.
EDIT: spróbowałem jeszcze skompilować clangiem i gcc z flagą -O0. Nic nie zmienia tego zachowania. Oprócz tego, chciałbym dodać, że w komentarzach do tego pytania dodałem więcej kodu źródłowego i zawęziłem problem do jakichś czterech linijek kodu.
EDIT 2: cały problem powoduje inputStream->peek() == EOF. nie wiem czemu