Друзья как видно из заголовка, этот оператор уже определен в STL.
Проблема состоит в том, что мне нужна своя реализация его, чтобы записать строку в файл, еще так эже надо писать unsigned long и читать их из файла.
В общем виде это во так выглядит
class vd_data
{
public:
vd_data();
~vd_vata();
std::string _str;
unsigned long _sl;
};
это код успешно компилица, а при запуске имею такую ошибку
... undefined symbol: _ZN3AmtlsERSt14basic_ofstreamIcSt11char_traitsIcEERKm
Если я правильно понял то при запуске случилось что не понятное, символ char_traits не был найден, но какое отношение он имеет я не понял.
Я конечно сделал без последних 4-х операторов заменил их методами
но чую — это не кошерно.
Вот посему прошу совета гуру — как заставить мои переопреденные операторы работать, или пояснения почему так не получится сделать.
Здравствуйте, boris_r_v, Вы писали:
__>Друзья как видно из заголовка, этот оператор уже определен в STL. __>Проблема состоит в том, что мне нужна своя реализация его, чтобы записать строку в файл, еще так эже надо писать unsigned long и читать их из файла.
Проще и надежнее всего будет воспользоваться каким-нибудь промежуточным объектом, как, например, это сделано в boost::serialization. Там объекты записываются не в стрим, а в некий archive, который уже и пишет в стрим. А если мешать в кучу форматированный вывод с сериализацией, ничего хорошего в результате не выйдет.
Это, разумеется, если не хочется воспользоваться какой-нибудь готовой библиотекой.
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Здравствуйте, boris_r_v, Вы писали:
__>Друзья как видно из заголовка, этот оператор уже определен в STL. __>Проблема состоит в том, что мне нужна своя реализация его, чтобы записать строку в файл, еще так эже надо писать unsigned long и читать их из файла.
фича в том, что не нужно "переопределять" стандартные operatorы!!
__>В общем виде это во так выглядит __>class vd_data __>{ __>public: __>vd_data(); __>~vd_vata(); __>std::string _str; __>unsigned long _sl; __>};
__>std::ofstream& operator << (std::ofstream&, const vd_data& ); __>std::ifstream& operator >> (std::ifstream&, vd_data& );
нужно все делать вот в этих двух операторах!
__>std::ofstream& operator << (std::ofstream&, const std::string& ); __>std::ifstream& operator >> (std::ifstream&, std::string& ); __>std::ofstream& operator << (std::ofstream&, const unsigned long& ); __>std::ifstream& operator >> (std::ifstream&, unsigned long& );
вот эти пеопределять не нужно! использовать их или нет зависит от того что ты хочешь получить. в частности текстовый вид или бинарный...
__>реализацию приводить не буду, пока.
а зря
__>Вот посему прошу совета гуру — как заставить мои переопреденные операторы работать, или пояснения почему так не получится сделать.
и вообще определять операторы конкретно для файловых потоков нехорошо! нужно использовать ostream и istream...
как я уже говорил всю работу нужно выполнять в "своих" operator<</oeprator>> определенных для твоей структуры, прибегая к стандартным при необходимости (или пользуя напрямую read()/write() у stream'a)...
как-то так! я не знаю в точности чего ты хочешь получить