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

Вывод на экран полей структуры - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.85
Roma4717
 Аватар для Roma4717
0 / 0 / 0
Регистрация: 12.02.2013
Сообщений: 22
21.04.2013, 17:13     Вывод на экран полей структуры #1
есть структура и функция которая считывает данные из файла и заносит в структуру, но структура передается в функцию через вектор и вывод : cout<< str1.fio; не прокатывает пишет identifier "str1" is undefined. Подскажите пожалуйста как в таком случае вывести поля структуры??
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
typedef struct 
    {
    string fio;
    string nomer;
    string date1;
    string date2;
    int debt,ought;
    } client;
bool Read_input1 (wchar_t* filename, vector <client>&w_client)
    {    
    fstream f1;
    f1.open(filename, ios::in);
    if (!f1.is_open())
    return false;
    while (!f1.eof())
    {
    client str1;
    f1>>str1.fio>>str1.nomer>>str1.date1>>str1.date2>>str1.debt>>str1.ought;
    if (!str1.fio.empty())
        w_client.push_back(str1);
    }
    return true;
        }
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
hoob
19 / 11 / 1
Регистрация: 04.11.2012
Сообщений: 89
Записей в блоге: 1
21.04.2013, 17:25     Вывод на экран полей структуры #2
Вообще, мне кажется, что стоит переопределить оператор >>, так будет правильнее
Roma4717
 Аватар для Roma4717
0 / 0 / 0
Регистрация: 12.02.2013
Сообщений: 22
23.04.2013, 01:01  [ТС]     Вывод на экран полей структуры #3
пытался вывести на экран поля структуры вот таким образом :
C++
1
2
for (vector<client>::iterator it =w_client.begin() ; it!=w_client.end() ; ++it)
cout<<*it;
ругается на треуг. скобки влево пишет что : Error 1 binary '<<' : no operator found which takes a right-hand operand of type 'client' (or there is no acceptable conversion)
что делать с этим ? уже долго бьюсь не могу найти решение
hoob
19 / 11 / 1
Регистрация: 04.11.2012
Сообщений: 89
Записей в блоге: 1
23.04.2013, 03:47     Вывод на экран полей структуры #4
Цитата Сообщение от Roma4717 Посмотреть сообщение
пытался вывести на экран поля структуры вот таким образом :
C++
1
2
for (vector<client>::iterator it =w_client.begin() ; it!=w_client.end() ; ++it)
cout<<*it;
ругается на треуг. скобки влево пишет что : Error 1 binary '<<' : no operator found which takes a right-hand operand of type 'client' (or there is no acceptable conversion)
что делать с этим ? уже долго бьюсь не могу найти решение
Переопределять оператор вывода <<

Добавлено через 2 минуты
C++
1
2
3
4
5
6
7
8
9
10
11
ofstream &operator <<(ofstream &stream, const client &cN)
{
    stream << cN.fio;
    stream << cN.nomer;
    stream << cN.date1;
    stream << date1;
    stream << date2;
    stream << debt;
    stream << ought;
    return stream;
}
Добавлено через 9 минут
Так стоит его переопределить для записи экземпляра класса client в файл :
C++
1
2
3
4
5
6
7
8
9
10
ofstream &operator <<(ofstream &stream, const client &cN)
{
    stream << cN.fio;
    stream << cN.nomer;
    stream << cN.date1;
    stream << cN.date2;
    stream << cN.debt;
    stream << cN.ought;
    return stream;
}
А так для считывания из файла:

C++
1
2
3
4
5
6
7
8
9
10
ofstream &operator >>(ofstream &stream, const client &cN)
{
    stream >> cN.fio;
    stream >> cN.nomer;
    stream >> cN.date1;
    stream >> cN.date2;
    stream >> cN.debt;
    stream >> cN.ought;
    return stream;
}

Теперь считывать можно примерно так:
C++
1
2
client *tmp = new client();
        outStream >> *client;
Ну а дальше выводите как вам угодно. Если все это дело в векторе храните, то примерно так:
C++
1
2
3
4
5
6
7
8
9
10
for(unsigned int i=0; i< vectorClient.size(); i++){
    cout << "Client #" << i << endl;
    cout << vectorClient.at(i).fio << endl;
    cout << vectorClient.at(i).nomer << endl;
    cout << vectorClient.at(i).date1 << endl;
    cout << vectorClient.at(i).date2 << endl;
    cout << vectorClient.at(i).debt << endl; 
    cout << vectorClient.at(i).ought << endl;
    cout <<"------------------------" << endl;
}
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
23.04.2013, 08:19     Вывод на экран полей структуры #5
hoob, а знаете зачем ссылка на поток возвращается? Чтобы писать в одну строчку можно было:
C++
1
2
3
4
5
ofstream& operator <<(ofstream& stream, const client& cN)
{
    stream << cN.fio << cN.nomer << cN.date1 << date1 << date2 << debt << ought;
    return stream;
}
Roma4717
 Аватар для Roma4717
0 / 0 / 0
Регистрация: 12.02.2013
Сообщений: 22
23.04.2013, 22:54  [ТС]     Вывод на экран полей структуры #6
hoob, спасибо большое ,помогли очень, буду разбираться!!
Yandex
Объявления
23.04.2013, 22:54     Вывод на экран полей структуры
Ответ Создать тему
Опции темы

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