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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
burst
1 / 1 / 0
Регистрация: 29.04.2010
Сообщений: 13
#1

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

30.07.2010, 09:42. Просмотров 650. Ответов 8
Метки нет (Все метки)

Всем доброе время суток!
Пишу класс шаблон, застрял на одном месте и не могу понять в чем проблема ...
имеется пользовательский класс, в нем определена функция перегрузки оператора вставки в файл:
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();
Заранее благодарен!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.07.2010, 09:42     Запись пользовательского класса
Посмотрите здесь:

Пример пользовательского класса - C++
можете показать пример пользовательского класса и объяснить как и что в нем работает?

Вектор объектов пользовательского класса - C++
Привет всем! Есть класс Automaton, я пытаюсь создать вектор Sample с объектами этого класса, а они ведут себя не так, как я ожидаю -...

Область видимости переменной пользовательского класса - C++
Всем привет! Столкнулся с такой проблемой: Создал клас и в нем класс исключений class A { char* pt; public: class...

Вставка и удаление объектов пользовательского класса в deque - C++
Доброго времени суток! У меня есть контейнер хранящий объекты пользовательского класса Detail: deque&lt; Detail* &gt; accumulator1 ( 1, nullptr...

Ошибки при создании vector'a пользовательского класса - C++
Шалом, мои весьма дорогие друзья, столкнулся с проблемой. Решил использовать вместо массивов пресловутый вектор, и вроде бы все шло хорошо,...

Исправить ошибку в конструкторе копирования пользовательского класса Sort - C++
Здравствуйте. Такая вот проблема. Обычный конструктор работает без ошибок и подчеркиваний: Sort::Sort() { cout &lt;&lt; &quot;len = &quot;; ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Евгений М.
1035 / 976 / 54
Регистрация: 28.02.2010
Сообщений: 2,829
Завершенные тесты: 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
Эксперт С++
3048 / 1693 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
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
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 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
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
02.08.2010, 07:13     Запись пользовательского класса #8
burst, Скиньте исправленный вариант. Вдруг кому пригодится
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.08.2010, 09:12     Запись пользовательского класса
Еще ссылки по теме:

Быстрая сортировка для массива обьектов пользовательского класса - C++
Насколько я знаю в Си++ есть встроеная ф-ция быстрой сортировки. Как нею воспользоваться для сортировки массива обьектов моего класса? Хочу...

Использование конструкторов и деструктора при проектировании пользовательского класса - C++
Дан одномерный массив A. Найти max (a2, a4, …, a2k) + min (a1, a3, …, a2k+1).

Как создать элемент вектора пользовательского типа(класса)? - C++
Делаю змейку в консоли, а по сути тренируюсь с классами и векторами. Есть класс с конструктором который создает кусок змейки в...

Найти причины ошибочной работы пользовательского класса MyVector - C++
Подскажите, что у меня не так с массивами. Почему вылет программы идет после несколько запусков консоли? Что я сделал не так? #include...


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

Или воспользуйтесь поиском по форуму:
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     Запись пользовательского класса
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru