1

次のコードはコンパイルに失敗します。

#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 で検索した後、ostrstream の代わりに ostringstream を使用する必要があると思われるため、プログラムを次のように変更しました。

#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'
4

2 に答える 2

3

freeze()呼び出しを破棄するだけです。現在の世代std::ostringstreamは、古い世代のようにメモリ管理の根性を公開していませんostrstream。元のコードを作り直して、stringstream が必要な方法でメモリを管理できるようにする必要があります (そうすれば、はるかに単純になり、エラーが発生しにくくなります!)。

于 2015-04-28T16:17:54.990 に答える
0

「 'ostrstream' は 'std' のメンバーではありません」 というエラーを報告しないように変更#include "sstream"する必要がありました。#include "strstream"

于 2015-05-05T12:36:22.367 に答える