У basic_stringbuf нет члена с именем 'freeze'

Следующий код не компилируется:

#include <cstdio> 
#include <sstream>
int main()
{
   std::ostrstream strm;                         
   strm.rdbuf()->freeze(0);                      
}

Я получаю следующие ошибки при компиляции:

g++ sample3.cpp
sample3.cpp: In function 'int main()':
sample3.cpp:5: error: 'ostrstream' is not a member of 'std'
sample3.cpp:5: error: expected `;' before 'strm'
sample3.cpp:6: error: 'strm' was not declared in this scope

После поиска в Google, я подозреваю, что я должен использовать ostringstream вместо ostrstream, поэтому я изменил программу, как показано ниже:

#include <cstdio> 
#include <sstream>
int main()
{
   std::ostringstream strm;                         
   strm.rdbuf()->freeze(0);                      
}

Но теперь я получаю следующие ошибки:

g++ sample3.cpp
sample3.cpp: In function 'int main()':
sample3.cpp:6: error: 'struct std::basic_stringbuf<char, std::char_traits<char>, std::allocator<char> >' has no member named 'freeze'

2 ответа

Решение

Просто перебери freeze() вызов - нынешнее поколение std::ostringstream не раскрывает вам внутренности управления памятью, как старые ostrstream сделал. Вам нужно будет переделать исходный код, чтобы поток строк управлял памятью так, как он хочет (это будет намного проще / менее подвержено ошибкам!).

Я должен был изменить #include "sstream" в #include "strstream"тогда он не сообщит об ошибке "ostrstream" не является членом "std".

Другие вопросы по тегам