Boost::iostreams を使用して、コンソールとファイルに同時に書き込みます。Eclipse を使用して (もちろん gdb を使用して) デバッグすると、Boost::iostreams から使用しているクラスの 1 つに RTTI シンボルが見つからないという警告が表示されます。
問題を再現するための最小限のコードを次に示します。
#ifndef BOOST_IO_STREAM_H_
#define BOOST_IO_STREAM_H_
#include <fstream>
#include <boost/iostreams/tee.hpp>
#include <boost/iostreams/stream.hpp>
using boost::iostreams::tee_device;
using boost::iostreams::stream;
typedef tee_device<std::ostream, std::ofstream> TeeDevice;
typedef stream<TeeDevice> TeeStream;
#endif /* BOOST_IO_STREAM_H_ */
int
main()
{
/* A config file to output experiment details */
std::string self_filename = "./experimentconfig.txt";
std::ofstream fconfig(self_filename.c_str());
TeeDevice my_tee(std::cout, fconfig);
TeeStream cool_cout(my_tee);
cool_cout << "Output to file and console during experiment run" << std::endl;
return 0;
}
デバッグ中に境界線を越えるとTeeStream cool_cout(my_tee);
、次の警告が表示されます。
warning: RTTI symbol not found for class 'boost::iostreams::stream<boost::iostreams::tee_device<std::ostream, std::basic_ofstream<char, std::char_traits<char> > >, std::char_traits<char>, std::allocator<char> >'
warning: RTTI symbol not found for class 'boost::iostreams::stream_buffer<boost::iostreams::tee_device<std::ostream, std::basic_ofstream<char, std::char_traits<char> > >, std::char_traits<char>, std::allocator<char>, boost::iostreams::output>'
オブジェクト cool_cout が検出されるたびに、警告が繰り返されます。これを修正するにはどうすればよいですか? もちろん、このコードを使用するプログラムは機能し、問題はありません。警告は無視されるべきではなく、RTTI シンボルについての知識を得る必要があります。(私は -f nortti でコンパイルできず、実行可能ファイルは、iostreams を使用するには rtti を確実に有効にする必要があると不平を言います)