Форум программистов, компьютерный форум CyberForum.ru

Запись пользовательского класса - C++

Восстановить пароль Регистрация
 
burst
1 / 1 / 0
Регистрация: 29.04.2010
Сообщений: 13
30.07.2010, 09:42     Запись пользовательского класса #1
Всем доброе время суток!
Пишу класс шаблон, застрял на одном месте и не могу понять в чем проблема ...
имеется пользовательский класс, в нем определена функция перегрузки оператора вставки в файл:
C++
1
2
3
4
5
ofstream& operator << (ofstream& s, user_type& ut)
{
    s << ut.fstreet << " " << ut.fhouse;
    return s;
}
В классе шаблоне имеется функция записи элементов однонаправленного кольцевого списка в файл:
C++
1
2
3
4
5
6
7
8
9
10
11
12
template <class Type>
void ucl<Type>::Write()
{
    ofstream file_("data.txt");
    element<Type>* cur_element = first;
    while( cur_element->next != last )
    {
        file_ << cur_element->data;
        cur_element = cur_element->next;
    }
    file_.close();
}
Тестирую класс с помощью стандартных типов int, char, float все работает на ура, а вот элементы пользовательского типа записываться не хотят ...
Причем ofstream& operator << (ofstream& s, user_type& ut) работает вроде корректно, проверял таким образом:
C++
1
2
3
4
5
user_type ut;
ofstream new_file("new.txt");
cin >> ut;
new_file << ut;
new_file.close();
Заранее благодарен!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Евгений М.
1033 / 974 / 53
Регистрация: 28.02.2010
Сообщений: 2,817
Завершенные тесты: 2
30.07.2010, 09:46     Запись пользовательского класса #2
А в чем вопрос?
burst
1 / 1 / 0
Регистрация: 29.04.2010
Сообщений: 13
30.07.2010, 10:55  [ТС]     Запись пользовательского класса #3
функция void ucl<Type>::Write() отказывается записывать элементы списка, если эти элементы являются экземплярами класса user_type ...
файл обрезается до нулевой длинны и все, и даже ошибок никаких не вылазит
Mr.X
Эксперт С++
 Аватар для Mr.X
2807 / 1583 / 248
Регистрация: 03.05.2010
Сообщений: 3,693
30.07.2010, 14:21     Запись пользовательского класса #4
Цитата Сообщение от burst Посмотреть сообщение
имеется пользовательский класс, в нем определена функция перегрузки оператора вставки в файл:
C++
1
2
3
4
5
ofstream& operator << (ofstream& s, user_type& ut)
{
    s << ut.fstreet << " " << ut.fhouse;
    return s;
}
Функция operator<< не может быть членом класса, так как объект класса здесь является правым операндом.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
30.07.2010, 18:03     Запись пользовательского класса #5
В классе перегрузка операторов ввода-вывода должна быть friend фукнцией.

friend std::ostream& operator <<(...,...).
burst
1 / 1 / 0
Регистрация: 29.04.2010
Сообщений: 13
30.07.2010, 18:41  [ТС]     Запись пользовательского класса #6
Цитата Сообщение от Lavroff Посмотреть сообщение
В классе перегрузка операторов ввода-вывода должна быть friend фукнцией.

friend std::ostream& operator <<(...,...).
как раз таки она у меня и есть дружественная, прототип описан в классе:

C++
1
friend ofstream& operator << (ofstream& s, user_type& ut);
а определена вне класса:

C++
1
2
3
4
5
ofstream& operator << (ofstream& s, user_type& ut)
{
        s << ut.fstreet << " " << ut.fhouse;
        return s;
}
я же говорю что я проверял работоспособность данной функции:

C++
1
2
3
4
5
user_type ut;
ofstream new_file("new.txt");
cin >> ut;
new_file << ut;
new_file.close();
все корректно записывается ....
burst
1 / 1 / 0
Регистрация: 29.04.2010
Сообщений: 13
02.08.2010, 06:33  [ТС]     Запись пользовательского класса #7
актуально

Добавлено через 11 часов 14 минут
нашёл в чем была проблема спасибо всем кто пытался помочь
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
02.08.2010, 07:13     Запись пользовательского класса #8
burst, Скиньте исправленный вариант. Вдруг кому пригодится
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.08.2010, 09:12     Запись пользовательского класса
Еще ссылки по теме:

C++ Ошибки при создании vector'a пользовательского класса
C++ Перегрузка оператора >> для пользовательского класса String

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
burst
1 / 1 / 0
Регистрация: 29.04.2010
Сообщений: 13
02.08.2010, 09:12  [ТС]     Запись пользовательского класса #9
Пользовательский класс:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
class user_type
{
private:
    string fstreet;
    int fhouse;
 
public:
    user_type(): fstreet("Unspecified"), fhouse(0)
    {}
    ~user_type()
    {}
    friend istream& operator >> (istream& s, user_type& ut);
    friend ostream& operator << (ostream& s, user_type& ut);
    friend ofstream& operator << (ofstream& s, user_type& ut);
};
//----------------------------------------------------------//
istream& operator >> (istream& s, user_type& ut)
{
    cout << "\nEnter street: "; cin >> ut.fstreet;
    cout << "Enter house number: "; cin >> ut.fhouse;
    return s;
}
//----------------------------------------------------------//
ostream& operator << (ostream& s, user_type& ut)
{
    cout << "\nStreet: "; cout << ut.fstreet;
    cout << "\nHouse number: "; cout << ut.fhouse;
    return s;
}
//----------------------------------------------------------//
ofstream& operator << (ofstream& s, user_type& ut)
{
    s << ut.fstreet << " | " << ut.fhouse;
    return s;
}
Функция записи класса шаблона:

C++
1
2
3
4
5
6
7
8
9
10
11
12
template <class Type>
void ucl<Type>::Write( int n )
{
    ofstream file_("data.txt");
    element<Type>* cur_element = first;
    for( int i = 0; i < n; i++ )
    {
        file_ << cur_element->data << " ";
        cur_element = cur_element->next;
    }
    file_.close();
}
Yandex
Объявления
02.08.2010, 09:12     Запись пользовательского класса
Ответ Создать тему
Опции темы

Текущее время: 01:22. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru