Есть класс в котором описан метод. Выглядит метод следующим образом :
void ldtold()
{
dlrs="";
string ustring;
ost << setiosflags(ios::fixed) << setprecision(2) << dollars << '\0';
ustring=ost.str();
dlrs=ustring;
}
Я не давно столкнулся с классом ostrstream. В качестве объекта ostrstream тут выступает ost. Поле класса dollars имеет тип long double.
Допустим поле dollars==5000000;
Проблема заключается в следующем : Когда я вызываю метод ldtold() первый раз(в функции main), то переменной ustring присваивается значение "5000000", т.е метод str() объекта ost преобразовал число long double к корректной. В принципе то что я и хотел.
Но когда я вызываю метод ldtold() еще раз, (допустим при втором вызове поле dollars==7000000), то переменная ustring не меняет свое значение, т.е как было там "5000000", так и осталось.. Почему так? Как можно решить проблему или что нужно еще вызвать для объекта ost?
Другие языки программирования и технологии
C++. Вопрос для разбирающихся.
Может сначала "почистить" строковый поток:
...
ost.str(string());
ost << setiosflags(ios::fixed) << setprecision(2) << dollars << '\0';
...
По идее второй вызов метода в твоем варианте должен дать строку:
"5000000.00\07000000.00\0"
При условии, что в поле dollars действительно новое значение.
можно вообще объявить строковый поток, как локальную переменной в данном методе, тогда он при каждом новом вызове он будет создан заново и будет пуст.
...
ost.str(string());
ost << setiosflags(ios::fixed) << setprecision(2) << dollars << '\0';
...
По идее второй вызов метода в твоем варианте должен дать строку:
"5000000.00\07000000.00\0"
При условии, что в поле dollars действительно новое значение.
можно вообще объявить строковый поток, как локальную переменной в данном методе, тогда он при каждом новом вызове он будет создан заново и будет пуст.
Егор Пирогов
Спасибо большое, я почему то сделал объект ost глобальным (в других прогах наверное понадобилось) =\ сделал локальным и чистить не приходиться ничего =) !
Сразу оговорюсь, что в плюсах не особо силён и понятия не имею что есть ostrstream. Но уверен, что копать надо именно в этом направлении. Судя по симптомам, лично у меня вариантов 2:
а) ost после первой инициализации более ничего не принимает, а-ля String в Java, но тогда бы вылезала либо runtime error при повторном вызове, либо какой-нибудь эксэпшн либо ещё что-нибудь в этом роде.
б) ostrstream реализован так, что хранит переданные ему значения в каких-то отдельных структурах данных, например в связанном списке, а метод str() возвращает значение 1-го элемена, но не достаёт его из потока/не перемещает указатель чтения/х. з. чего там ещё.
Для подтверждения своих предположений я бы в первую очередь попробовал на каждой итерации цикла (ну или перед каждым вызовом ldtold прибивать ost и создавать заново. Если прокатит, значит на 100% проблема в нём и надо разбиратся в его работе.
а) ost после первой инициализации более ничего не принимает, а-ля String в Java, но тогда бы вылезала либо runtime error при повторном вызове, либо какой-нибудь эксэпшн либо ещё что-нибудь в этом роде.
б) ostrstream реализован так, что хранит переданные ему значения в каких-то отдельных структурах данных, например в связанном списке, а метод str() возвращает значение 1-го элемена, но не достаёт его из потока/не перемещает указатель чтения/х. з. чего там ещё.
Для подтверждения своих предположений я бы в первую очередь попробовал на каждой итерации цикла (ну или перед каждым вызовом ldtold прибивать ost и создавать заново. Если прокатит, значит на 100% проблема в нём и надо разбиратся в его работе.
Егор Пирогов
Да я так и сделал, я объект ost сделал локальным и помогло =)
блин хочу глянуть на умника который ответит на эту хрень))))))) 0!!!!(не вобиду написавшему)
Егор Пирогов
Поверьте, есть такие люди для которых это цветочки :))
Похожие вопросы
- C++. Указатели. Связный список. Как добавить элемент в конец списка? Вопрос для разбирающихся
- вопрос про массив одномерный C++ (вопрос отредактирован)
- хочу создать свой сайт на бесплатном хостинге с перечнем реализуемого товара, в этих вопросах не разбираюсь совсем
- C++ Вопросы
- C++. Вопрос
- C++. Вопрос по функции memmove()
- C++ вопрос по cin&cout, правильное использование
- Ещё тупой вопрос по C++ :)
- Вопрос актуальности языка C++, расхождение источников. Мне нужна достоверная инфа на это счет.
- Вопрос для тех кто знает точный ответ, язык C про функции все подробности вопроса внутри...