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

Передача свойств объектов между функциями - C++

Восстановить пароль Регистрация
 
netmare
0 / 0 / 0
Регистрация: 29.10.2013
Сообщений: 7
13.11.2013, 00:33     Передача свойств объектов между функциями #1
Народ, I need help!
Есть класс:
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class Employees {
public:
    Employees();
    Employees(std::string _Surname, std::string _Name, std::string _Occupation, int _YearOfEmployment);
    int GetYear();
    
    std::string GetName();
    std::string GetSurname();
    std::string GetOccupation();
    void SetName (std::string _Name);
    void SetSurname (std::string _Surname);
    void SetOccupation (std::string _Occupation);
    void SetYear (int _YearOfEmployment);
private:
    std::string Surname;
    std::string Name;
    std::string Occupation;
    int YearOfEmployment;
};

Есть функция 1, которая задает свойства объекта:
Кликните здесь для просмотра всего текста
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
void ManualInput () {
    setlocale(LC_ALL, "Russian");
    std::string nbuf,sbuf,obuf;
    int sName, dbuf;
    Employees Emp3[2];  
    int max = Emp3[0].GetYear();
    for (int i=0;i<2;i++) {
    std::cout << "Введите имя:";
    cin >> nbuf;
    Emp3[i].SetName(nbuf);
    std::cout << "Введите фамилию:";
    cin >> sbuf;
    Emp3[i].SetSurname(sbuf);
    std::cout << "Введите профессию:";
    cin >> obuf;
    Emp3[i].SetOccupation(obuf);
    std::cout << "Введите год приема:";
    cin >> dbuf;
    Emp3[i].SetYear(dbuf);
    std::cout << i << ". " << Emp3[i].GetName() << std::endl;
    }
    for(int i=0;i<2;i++) {
        if(max<Emp3[i].GetYear())
        max=Emp3[i].GetYear();
}
    std::cout << "Последний работник принят в " << max << " году" << std::endl;
}

Есть функция 2, которая по сути дела должна редактировать свойства выбранного объекта:
Кликните здесь для просмотра всего текста
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
void EditEmployess () {
    setlocale(LC_ALL, "Russian");
    int sName, dbuf;
    std::string nbuf,sbuf,obuf;
    Employees Emp3[2];  
    
    std::cout << "Введите номер записи:";
    cin >> sName;
    for (int i=0;i<2;i++){
        if (i == sName) {
    std::cout << "Имя:" <<Emp3[i].GetName() << std::endl;
    std::cout << "Фамилия:" << Emp3[i].GetSurname() << std::endl;
    std::cout << "Должность:" << Emp3[i].GetOccupation() << std::endl;
    std::cout << "Год принятия:" << Emp3[i].GetYear() << std::endl;
    } else { 
        std::cout << "Записи не существует" << std::endl;
        break;
        }
    std::cout << "Введите  имя:";
    cin >> nbuf;
    Emp3[i].SetName(nbuf);
    std::cout << "Введите фамилию:";
    cin >> sbuf;
    Emp3[i].SetSurname(sbuf);
    std::cout << "Введите профессию:";
    cin >> obuf;
    Emp3[i].SetOccupation(obuf);
    std::cout << "Введите год приема:";
    cin >> dbuf;
    Emp3[i].SetYear(dbuf);
    }
}


Проблема в том, что при вызове объекта Emp3[i], почему то не передаются значения, которые мы задавали в функции ввода данных. То есть когда я ввожу номер записи, например 1 - выдает, что записи не существует.
Я никак не могу понять каким образом можно передавать объекты и их свойства между функциями

Заранее спасибо за помощь
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.11.2013, 00:33     Передача свойств объектов между функциями
Посмотрите здесь:

Чтение свойств нескольких объектов С++ буилдер C++
C++ Передача значений переменных функциями
Передача свойств обьекта в функцию openGL C++
С++ Необъявленный идентификатор при работе с классами. (Функция сравнивает значение свойств объектов) C++
C++ Работа с функциями, возвращающими значения. Передача параметров по значению
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zvoronz
 Аватар для zvoronz
270 / 237 / 21
Регистрация: 29.05.2012
Сообщений: 889
13.11.2013, 00:39     Передача свойств объектов между функциями #2
Объявление массива
C++
1
Employees Emp3[2];
нужно сделать на глобальном уровне, либо добавить указатель на массив в параметры процедуры
C++
1
void ManualInput (Employees* Emp3)
и
C++
1
void EditEmployess (Employees* Emp3)
. Если добавить параметры то тогда не нужна глобальная переменная массив Emp3.
Из процедур
C++
1
Employees Emp3[2];
нужно будет убрать.
netmare
0 / 0 / 0
Регистрация: 29.10.2013
Сообщений: 7
13.11.2013, 01:00  [ТС]     Передача свойств объектов между функциями #3
zvoronz, по Вашему совету сделал так:
Кликните здесь для просмотра всего текста
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
void ManualInput (Employees* Emp3) {
    setlocale(LC_ALL, "Russian");
    std::string nbuf,sbuf,obuf;
    int sName, dbuf;
    //Employees Emp3[2];    
    int max = Emp3[0].GetYear();
    for (int i=0;i<2;i++) {
    std::cout << "Введите имя:";
    cin >> nbuf;
    Emp3[i].SetName(nbuf);
    std::cout << "Введите фамилию:";
    cin >> sbuf;
    Emp3[i].SetSurname(sbuf);
    std::cout << "Введите профессию:";
    cin >> obuf;
    Emp3[i].SetOccupation(obuf);
    std::cout << "Введите год приема:";
    cin >> dbuf;
    Emp3[i].SetYear(dbuf);
    std::cout << i << ". " << Emp3[i].GetName() << std::endl;
    }
    for(int i=0;i<2;i++) {
        if(max<Emp3[i].GetYear())
        max=Emp3[i].GetYear();
}
    std::cout << "Последний работник принят в " << max << " году" << std::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
void EditEmployess (Employees* Emp3) {
    setlocale(LC_ALL, "Russian");
    int sName, dbuf;
    std::string nbuf,sbuf,obuf;
    //Employees Emp3[2];    
    
    std::cout << "Введите номер записи:";
    cin >> sName;
    for (int i=0;i<2;i++){
        if (i == sName) {
    std::cout << "Имя:" <<Emp3[i].GetName() << std::endl;
    std::cout << "Фамилия:" << Emp3[i].GetSurname() << std::endl;
    std::cout << "Должность:" << Emp3[i].GetOccupation() << std::endl;
    std::cout << "Год принятия:" << Emp3[i].GetYear() << std::endl;
    } else { 
        std::cout << "Записи не существует" << std::endl;
        break;
        }
    std::cout << "Введите  имя:";
    cin >> nbuf;
    Emp3[i].SetName(nbuf);
    std::cout << "Введите фамилию:";
    cin >> sbuf;
    Emp3[i].SetSurname(sbuf);
    std::cout << "Введите профессию:";
    cin >> obuf;
    Emp3[i].SetOccupation(obuf);
    std::cout << "Введите год приема:";
    cin >> dbuf;
    Emp3[i].SetYear(dbuf);
    }
}


Теперь компилятор выдает ошибку:
C++
1
2
c:\users\netmare\documents\visual studio 2012\projects\lab2\lab2\lab2.cpp(142): error C2660: ManualInput: функция не принимает 0 аргументов
c:\users\netmare\documents\visual studio 2012\projects\lab2\lab2\lab2.cpp(144): error C2660: EditEmployess: функция не принимает 0 аргументов
zvoronz
 Аватар для zvoronz
270 / 237 / 21
Регистрация: 29.05.2012
Сообщений: 889
13.11.2013, 01:20     Передача свойств объектов между функциями #4
Ну так в main теперь вот так должно быть
C++
1
2
3
4
5
6
7
8
int main()
{
...
   Employees Emp3[2];
   ManualInput(Emp3);
   EditEmployess(Emp3);
...
}
netmare
0 / 0 / 0
Регистрация: 29.10.2013
Сообщений: 7
13.11.2013, 01:25  [ТС]     Передача свойств объектов между функциями #5
zvoronz, вроде бы с этим разобрался (видимо я писал ответ одновременно с Вами) - забыл передавать Emp3 при вызове функции. Но проблема в том, что отредактировать можно лишь запись с номером 0, при попытке выбрать другие - "Записи не существует"
zvoronz
 Аватар для zvoronz
270 / 237 / 21
Регистрация: 29.05.2012
Сообщений: 889
13.11.2013, 01:34     Передача свойств объектов между функциями #6
C++
1
2
3
4
5
6
7
8
9
10
for (int i=0;i<2;i++){      /////////////////Тут не нужен цикл.
        if (i == sName) {
    std::cout << "Имя:" <<Emp3[i].GetName() << std::endl;
    std::cout << "Фамилия:" << Emp3[i].GetSurname() << std::endl;
    std::cout << "Должность:" << Emp3[i].GetOccupation() << std::endl;
    std::cout << "Год принятия:" << Emp3[i].GetYear() << std::endl;
    } else { 
        std::cout << "Записи не существует" << std::endl;
        break;
        }
Правильный код.
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
void EditEmployess (Employees* Emp3) {
    setlocale(LC_ALL, "Russian");
    int sName, dbuf;
    std::string nbuf,sbuf,obuf;
    
    std::cout << "Введите номер записи:";
    cin >> sName;
    if (sName => 2) {        std::cout << "Записи не существует" << std::endl;
        return;}
    std::cout << "Имя:" <<Emp3[sName].GetName() << std::endl;
    std::cout << "Фамилия:" << Emp3[sName].GetSurname() << std::endl;
    std::cout << "Должность:" << Emp3[sName].GetOccupation() << std::endl;
    std::cout << "Год принятия:" << Emp3[sName].GetYear() << std::endl;
 
    std::cout << "Введите  имя:";
    cin >> nbuf;
    Emp3[sName].SetName(nbuf);
    std::cout << "Введите фамилию:";
    cin >> sbuf;
    Emp3[sName].SetSurname(sbuf);
    std::cout << "Введите профессию:";
    cin >> obuf;
    Emp3[sName].SetOccupation(obuf);
    std::cout << "Введите год приема:";
    cin >> dbuf;
    Emp3[sName].SetYear(dbuf);
    }
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.11.2013, 01:43     Передача свойств объектов между функциями
Еще ссылки по теме:

Работа с функциями, возвращающими значения. Передача параметров по значению C++
Map с функциями: Как использовать функции в качестве объектов C++
C++ Базовый класс в иерархии наследования. Вывод свойств объектов

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

Или воспользуйтесь поиском по форуму:
netmare
0 / 0 / 0
Регистрация: 29.10.2013
Сообщений: 7
13.11.2013, 01:43  [ТС]     Передача свойств объектов между функциями #7
zvoronz, спасибо огромнейшее Разобрался что к чему
Yandex
Объявления
13.11.2013, 01:43     Передача свойств объектов между функциями
Ответ Создать тему
Опции темы

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