Перегруженные функции
Объясните пожалуйста, как декларировать перегруженные функции. Недавно столкнулся с такой проблемой: необходимо реализовать функцию, пишущую в файл данные различных типов...
Вот так выглядят прототипы моих функций:
int put_stream(int value, const char* filename);
int put_stream(const char* stream, const char* filename);
...ну и т.д.
При трансляции в месте обьявления второй функции:
putstream.cpp: error: a function definition is not allowed here, before '{' token
Страуструп пишет, что необходимо описать функцию, как overload.
Пишу:
overload put_stream;
В ответ получаю: putstream.cpp: error: 'overload' does not name a type.
Пишу на Linux'е. Версия gcc - 4.1.2.
Куда копать?
Для С++ код который ты привел абсолютно нормальный и без проблем компиляется на gcc. Тоесть или ошибка у тебя гдето еще за пределами приведенного кода, или может ты пишешь (ну и всмысле компиляешь) на самом деле на С, а не на С++. А в С нельзя так перегружать функции. Про overload - это ты чето выдумал. Может текст в оригинале читал, и там пишеться что функции такие overload - тоесть по русски перегруженные )
Как можно описать прототип put_stream() для вывода адреса элемента структуры в файл?
Прощще определись какие структуры у тебя будут в файле храниться и какой у него формат. И напиши для него метод для записи и для чтения. А уж там в файл все вместе в нужной последовательности записывай.
В смысле создать свой класс, что ли? Я об этом уже думал, но поскольку для C++ я новичок, для меня это будет проблематично. Но буду пытаться. Спасибо!
2. Перегружаем функции вывода в поток для каждого типа данных, к примеру,
ofstream &operator << (ofstream &stream, MyStruct my_value)
{
stream << my_value.field1;
stream << my_value.field2;
stream << my_value.field3;
return stream;
}
*** glibc detected ***./fstream: munmap_chunk(): invalid pointer бла бла бла...
Повторюсь ещё раз - программа работает нормально.
Интересно, это я намутил с new и delete, или это проблема glibc?
Цитата: cheburator
ofstream &operator << (ofstream &stream, MyStruct my_value)
{
stream << my_value.field1;
stream << my_value.field2;
stream << my_value.field3;
return stream;
}
Я идиот...
Код:
stream << my_value.field1 << my_value.field2 << my_value.field3;
Интересно в чем-же идиот?
Цитата: __AleXX__
Интересно в чем-же идиот?
Можно было короче написать.