Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
ighor
13 / 13 / 21
Регистрация: 13.11.2014
Сообщений: 262
1

Найти причины и способы исправления ошибок в коде (класс "Person")

19.02.2016, 22:42. Просмотров 906. Ответов 19
Метки нет (Все метки)

Возникла проблема при изучении классов
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#pragma once
class person
{
private:
    int age;
    char name[50];
    char city[50];
    char street[50];
    char job[50];
    int salary;
    char hobby[50];
public:
    void write_file(const person& obj, char nm[50], char stre[50],char ct[50], char hb[50], int ag, char jb[50], int sal);
    void read_file(void);
    int work(char nm[50], char jb[50], int sal);
    int life(char nm[50], char stre[50], char hb[50], char ct[50], int ag);
};
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#include "person.h"
#include "stdafx.h"
#include <fstream>
#include <iostream>
#include <vector>
#include <string>
using namespace std;
 
void person::write_file(const  person& obj, char nm[50], char stre[50], char ct[50], char hb[50], int ag, char jb[50], int sal)
{
    setlocale(LC_ALL, "Ukrainian");
    ofstream fout("i.dat");
    name[50] = nm[50];
    street[50] = stre[50];
    hobby[50] = hb[50];
    job[50] = jb[50];
    city[50] = ct[50];
    age = ag;
    salary = sal;
    fout << obj.name<< endl;
    fout << obj.city<< endl;
    fout << obj.age<< endl;
    fout << obj.hobby << endl;
    fout << obj.job << endl;
    fout << obj.salary << endl;
    fout << obj.street << endl;
    fout.close();
}
void person::read_file(void)
{
    setlocale(LC_ALL, "Ukrainian");
    string str;
    ifstream inf("I.dat");
    if (!inf)
    {
        cout << "Error opening file!" << endl;
        return;
    }
 
    while (!inf.eof())
    {
        getline(inf, str);
        cout << str << endl;
    }
    inf.close();
}
 
int person::work(char nm[50], char jb[50], int sal)
{
    setlocale(LC_ALL, "Ukrainian");
    name[50] = nm[50];
    job[50] = jb[50];
    salary = sal;
    cout << "Введіть ім'я персони "  ;
    cin >> name[50];
    cout << "Введіть посаду персони " ;
    cin >> job[50];
    cout << " Введіть зарплату персони " ;
    cin >> salary;
    return  salary;
}
int person::life(char nm[50], char stre[50], char hb[50], char ct[50], int ag)
{
    setlocale(LC_ALL, "Ukrainian");
    name[50] = nm[50];
    street[50] = stre[50];
    hobby[50] = hb[50];
    city[50] = ct[50];
    age = ag;
    cout << "Введіть ім'я персони ";
    cin >> name[50];
    cout << "Введіть місто персони ";
    cin >> city[50];
    cout << " Введіть вулицю персони ";
    cin >> street[50];  
    cout << "Введіть вік персони ";
    cin >> age;
    cout << "Введіть хобі персони ";
    cin >> hobby;
    return age;
}
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
// lab2.cpp: определяет точку входа для консольного приложения.
//
#include "person.h"
#include "stdafx.h"
#include <fstream>
#include <iostream>
#include <vector>
#include <string>
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "Ukrainian");
    int n;
    cout << "Введiть кiлькiсть персон ";
    cin >> n;
    person *typed = new person[n];
    for (int i = 0; i < n; i++)
    {
        typed[i].life;
        typed[i].work;
    }
    return 0;
}
выдает такую ошибку
http://www.cyberforum.ru/attachment....1&d=1455910948
0
Миниатюры
Найти причины и способы исправления ошибок в коде (класс "Person")  
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.02.2016, 22:42
Ответы с готовыми решениями:

Найти причины и способы исправления ошибок в коде (пользовательский класс "String", перегрузка функций)
Не пойму почему этот код не работает...Подскажите что не так,пожалуйста....

Найти причины и способы исправления ошибок в коде (игра "Яйцелов")
Завтра дедлайн, а у меня яйца не падают ! не подскажете, в чем проблема ? #...

Найти причины и способы исправления ошибки "Segmentation fault" в заданном коде
Здравствуйте. С языком c++ и программировании в целом только знакомлюсь....

Найти причины и способы исправления ошибок в коде
#include&lt;iostream&gt; #include&lt;iomanip&gt; #include&lt;stdio.h&gt; #include&lt;conio.h&gt;...

Найти причины и способы исправления ошибок в коде
Помогите найти ошибку, вылетает где то в for. #include &lt;iostream&gt; #include...

19
_Valera_
490 / 372 / 136
Регистрация: 27.01.2015
Сообщений: 1,588
19.02.2016, 22:46 2
Цитата Сообщение от ighor Посмотреть сообщение
C++
1
int work(char nm[50], char jb[50], int sal);
Цитата Сообщение от ighor Посмотреть сообщение
C++
1
typed[i].work;
это функция

Добавлено через 1 минуту
Цитата Сообщение от ighor Посмотреть сообщение
C++
1
person *typed = new person[n];
а это указатель

Добавлено через 47 секунд
C++
1
2
 typed[i]->life(аргументы);
 typed[i]->work(аргументы);
1
ighor
13 / 13 / 21
Регистрация: 13.11.2014
Сообщений: 262
20.02.2016, 15:22  [ТС] 3
_Valera_, не получается
ошибка : подчеркнутый "typed" выражение должно иметь тип указателя
когда "typed" без [i] то ошибки нет
0
_Valera_
490 / 372 / 136
Регистрация: 27.01.2015
Сообщений: 1,588
20.02.2016, 15:26 4
Цитата Сообщение от ighor Посмотреть сообщение
не получается
измененный код, скрин ошибки.
1
ighor
13 / 13 / 21
Регистрация: 13.11.2014
Сообщений: 262
20.02.2016, 15:28  [ТС] 5
_Valera_,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int main()
{
    setlocale(LC_ALL, "Ukrainian");
    int n;
    cout << "Введiть кiлькiсть персон ";
    cin >> n;
    person *typed = new person[n];
    for (int i = 0; i < n; i++)
    {
        typed[i]->life("Igor","zatons","games","khme",18);
        typed[i]->work("Ssasa","Ingeneer ",7777);
    }
    return 0;
}
0
ighor
13 / 13 / 21
Регистрация: 13.11.2014
Сообщений: 262
20.02.2016, 15:30  [ТС] 6
http://www.cyberforum.ru/attachment....1&d=1455971381
0
Миниатюры
Найти причины и способы исправления ошибок в коде (класс "Person")  
Kerry_Jr
Эксперт PHP
2210 / 2006 / 940
Регистрация: 14.05.2014
Сообщений: 5,869
Записей в блоге: 1
Завершенные тесты: 5
20.02.2016, 15:31 7
Цитата Сообщение от ighor Посмотреть сообщение
C++
1
2
3
4
5
name[50] = nm[50];
street[50] = stre[50];
hobby[50] = hb[50];
job[50] = jb[50];
city[50] = ct[50];
Массивы так не присваиваются - копировать нужно поэлементно.
1
ighor
13 / 13 / 21
Регистрация: 13.11.2014
Сообщений: 262
20.02.2016, 15:33  [ТС] 8
Kerry_Jr, через strcpy сделать?
0
Kerry_Jr
Эксперт PHP
2210 / 2006 / 940
Регистрация: 14.05.2014
Сообщений: 5,869
Записей в блоге: 1
Завершенные тесты: 5
20.02.2016, 15:33 9
ighor, да.
1
ighor
13 / 13 / 21
Регистрация: 13.11.2014
Сообщений: 262
20.02.2016, 15:36  [ТС] 10
но у меня не в этом ошибка

Добавлено через 13 секунд
Kerry_Jr,
0
Ferrari F1
20.02.2016, 15:39
  #11

Не по теме:

Цитата Сообщение от ighor Посмотреть сообщение
C++
1
setlocale(LC_ALL, "Ukrainian");
поменять на
Цитата Сообщение от ighor Посмотреть сообщение
C++
1
setlocale(LC_ALL, "Russian");
Если вы поняли, о чем я.

0
ighor
13 / 13 / 21
Регистрация: 13.11.2014
Сообщений: 262
20.02.2016, 15:41  [ТС] 12
Ferrari F1, зачем? Форум вне политики
0
_Valera_
490 / 372 / 136
Регистрация: 27.01.2015
Сообщений: 1,588
20.02.2016, 15:44 13
Лучший ответ Сообщение было отмечено ighor как решение

Решение

ighor, а мой косяк, я тебе не верно сказал.

Добавлено через 1 минуту
Цитата Сообщение от _Valera_ Посмотреть сообщение
а это указатель

*typed[i]->life(аргументы);
*typed[i]->work(аргументы);
там все ок было, это я затупил. Ошибка только в отсутсвии аргументов была.
1
Kerry_Jr
Эксперт PHP
2210 / 2006 / 940
Регистрация: 14.05.2014
Сообщений: 5,869
Записей в блоге: 1
Завершенные тесты: 5
20.02.2016, 16:02 14
Цитата Сообщение от ighor Посмотреть сообщение
но у меня не в этом ошибка
После исправления той ошибки встретились бы с этой.
0
ighor
13 / 13 / 21
Регистрация: 13.11.2014
Сообщений: 262
20.02.2016, 20:31  [ТС] 15
Здравствуйте. Я не знаю как сделать , чтобы процедура write_file(person& obj) записывала правильно. Записывает только последний класс.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#pragma once
class person
{
private:
    int age;
    char name[50];
    char city[50];
    char street[50];
    char job[50];
    int salary;
    char hobby[50];
public:
    void write_file( person& obj);
    void read_file();
    int work_life(person& obj);
};

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
#include "person.h"
#include "stdafx.h"
#include <fstream>
#include <iostream>
#include <vector>
#include <string>
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "Ukrainian");
    int n;
    cout << "Введiть кiлькiсть персон ";
    cin >> n;
    person *typed = new person[n];
    for (int i = 0; i < n; i++)
    {
        typed[i].work_life(typed[i]);
    }
    for (int i = 0; i < n ; i++)
    {
        typed[i].write_file(typed[i]);
    }
    return 0;
}
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#include "person.h"
#include "stdafx.h"
#include <fstream>
#include <iostream>
#include <vector>
#include <string>
using namespace std;
 
void person::write_file(person& obj)
{
    setlocale(LC_ALL, "Ukrainian");
    ofstream fout("i.dat");
    fout << obj.name<< endl;
    fout << obj.city << endl;
    fout << obj.age << endl;
    fout << obj.hobby << endl;
    fout << obj.job << endl;
    fout << obj.salary << endl;
    fout << obj.street << endl;
    fout.close();
}
void person::read_file(void)
{
    setlocale(LC_ALL, "Ukrainian");
    string str;
    ifstream inf("I.dat");
    if (!inf)
    {
        cout << "Error opening file!" << endl;
        return;
    }
 
    while (!inf.eof())
    {
        getline(inf, str);
        cout << str << endl;
    }
    inf.close();
}
 
int person::work_life(person& obj)
{
    setlocale(LC_ALL, "Ukrainian");
    cout << "Введіть ім'я персони ";
    cin >> obj.name;
    cout << "Введіть місто персони ";
    cin >> obj.city;
    cout << " Введіть вулицю персони ";
    cin >> obj.street;
    cout << "Введіть вік персони ";
    cin >> obj.age;
    cout << "Введіть хобі персони ";
    cin >> obj.hobby;
    cout << "Введіть посаду персони ";
    cin >> obj.job;
    cout << " Введіть зарплату персони ";
    cin >> obj.salary;
    return  obj.salary;
}
0
_Valera_
490 / 372 / 136
Регистрация: 27.01.2015
Сообщений: 1,588
20.02.2016, 20:37 16
Цитата Сообщение от ighor Посмотреть сообщение
ofstream fout("i.dat");
так файл сотрется при открытии. Найди для дозаписи
1
ighor
13 / 13 / 21
Регистрация: 13.11.2014
Сообщений: 262
20.02.2016, 20:52  [ТС] 17
_Valera_, для дозаписи служит это
C++
1
ofstream fout("i.dat", ios::app);
но теперь , когда запускаешь програму второй раз там эти данные остаются . Как сделать чтобы перед запуском файл очистился, и записать нужное количество структур?
0
_Valera_
490 / 372 / 136
Регистрация: 27.01.2015
Сообщений: 1,588
20.02.2016, 20:58 18
Цитата Сообщение от ighor Посмотреть сообщение
но теперь , когда запускаешь програму второй раз там эти данные остаются . Как сделать чтобы перед запуском файл очистился, и записать нужное количество структур?
придумай что-то. Очищай в начале программы. Или еще что-то.
1
ighor
13 / 13 / 21
Регистрация: 13.11.2014
Сообщений: 262
20.02.2016, 21:43  [ТС] 19
_Valera_, последний вопрос , который связан с чтением из файла .
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void person::read_file(person& obj)
{
    setlocale(LC_ALL, "Ukrainian");
    ifstream fout("i.dat");
    fout >> obj.name;
    fout >> obj.city;
    fout >> obj.age ;
    fout >> obj.hobby;
    fout >> obj.job ;
    fout >> obj.salary ;
    fout >> obj.street ;
}
void person::print_file( person& obj)
{
    cout << "iм'я " << obj.name << "  Посада " << obj.job <<"Зарплата "<<obj.salary << endl << endl;
}
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
36
37
#include <iostream>
#include <vector>
#include <string>
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "Ukrainian");
    int n;
    cout << "Введiть кiлькiсть персон ";
    cin >> n;
    person *typed = new person[n];
    ofstream fout("i.dat");
    for (int i = 0; i < n; i++)
    {
        typed[i].work_life(typed[i]);
    }
    for (int i = 0; i < n; i++)
    {
        typed[i].write_file(typed[i]);
 
    }
    fout.close();
    for (int i = 0; i < n; i++)
    {
        typed[i].read_file(typed[i]);
    }
 
    for (int i = 0; i < n; i++)
    {
        typed[i].print_file(typed[i]);
    }
    cin.get();
    cin.get();
    return 0;
 
}
выводит н-ное количество раз одинаковое
0
_Valera_
490 / 372 / 136
Регистрация: 27.01.2015
Сообщений: 1,588
21.02.2016, 00:30 20
Цитата Сообщение от ighor Посмотреть сообщение
выводит н-ное количество раз одинаковое
Цитата Сообщение от ighor Посмотреть сообщение
void person::read_file(person& obj)
{
* * setlocale(LC_ALL, "Ukrainian");
* * ifstream fout("i.dat");
* * fout >> obj.name;
* * fout >> obj.city;
* * fout >> obj.age ;
* * fout >> obj.hobby;
* * fout >> obj.job ;
* * fout >> obj.salary ;
* * fout >> obj.street ;
}
ты считал данные и закрыл файл. После закрытия его "читалка" переместилась в начало. То есть либо необходимо считать сразу весь файл либо не закрывать его либо..... Разбирайся.
0
21.02.2016, 00:30
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.02.2016, 00:30

Найти причины и способы исправления ошибок в коде
#include &lt;stdio.h&gt; #include &lt;time.h&gt; #include &lt;stdlib.h&gt; int main () ...

Найти причины и способы исправления ошибок в коде
Почему она не компилируется? #include &lt;iostream.h&gt; #include &lt;algorithm&gt;...

Найти причины и способы исправления ошибок в коде
Программа из 2 модулей падает в этом месте x=x*y; y=x/y; x=x/y; пишет...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

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