Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 29.10.2013
Сообщений: 7
1

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

13.11.2013, 00:33. Показов 850. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Народ, 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 - выдает, что записи не существует.
Я никак не могу понять каким образом можно передавать объекты и их свойства между функциями

Заранее спасибо за помощь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.11.2013, 00:33
Ответы с готовыми решениями:

Передача значений между функциями
Доброго дня, создал программу, которая вводимые целочисленные элементы динамического массива,...

Присваивание объектов одного типа между собой и передача объекта в функцию по значению
При первом знакомстве с С++ усиленно не могу понять вот такие моменты : 1. Имеем вот такой код : ...

Передача между функциями
Привет! Ребят подскажите плез как передать массив &quot;change&quot; между ф-иями jquery ...

Передача данных между функциями
Вопрос следующий: можно ли передать данные между функциями бкщ создание Глобал-переменных и без...

6
273 / 241 / 56
Регистрация: 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];
нужно будет убрать.
1
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 аргументов
0
273 / 241 / 56
Регистрация: 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);
...
}
1
0 / 0 / 0
Регистрация: 29.10.2013
Сообщений: 7
13.11.2013, 01:25  [ТС] 5
zvoronz, вроде бы с этим разобрался (видимо я писал ответ одновременно с Вами) - забыл передавать Emp3 при вызове функции. Но проблема в том, что отредактировать можно лишь запись с номером 0, при попытке выбрать другие - "Записи не существует"
0
273 / 241 / 56
Регистрация: 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);
    }
}
1
0 / 0 / 0
Регистрация: 29.10.2013
Сообщений: 7
13.11.2013, 01:43  [ТС] 7
zvoronz, спасибо огромнейшее Разобрался что к чему
0
13.11.2013, 01:43
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.11.2013, 01:43
Помогаю со студенческими работами здесь

Передача значания между функциями
Привет всем!!!! не могу передать переменную из одной функции в другую: За основу всято ...

Передача переменных между функциями
Здравствуйте! Вот есть код, который должен отправлять письмо с полученными методом $_POST данными:...

Передача свойств между классами
const {active} = this.props; return ( &lt;div&gt; ...

Передача массивов между функциями в matlab giu
Здравствуйте. Помогите пожалуйста решить проблему Есть программа которая представляет из себя...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru