basic_stringbuf没有名为"冻结"的成员

basic_stringbuf has no member named 'freeze'

本文关键字:冻结 成员 stringbuf basic      更新时间:2023-10-16

以下代码编译失败:

#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

在谷歌中搜索后,我怀疑我应该使用 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'

只是取消freeze()调用 - 当前一代std::ostringstream不会像旧ostrstream那样向您暴露其内存管理胆量。 您需要重新设计原始代码,让字符串流以它想要的方式管理内存(这样会更简单/更不容易出错!

我应该#include "sstream"更改为#include "strstream"然后它不会报告错误"'Ostrstream'不是'std'的成员"。