2015-04-30 4 views
0

У меня, похоже, проблема с изменением переменных в классах с C++.изменение значений переменных в классах в C++

int main() { 
ofstream file; 
file.open("example.txt"); 

Job serverJob("Server", "FOH"); 
TimeSlot slot1(Time(12, 30), Time(12, 30), serverJob); 

slot1.setEndTime(Time(20, 15)); 
slot1.setEmployee(Employee("Jacob", "Smith")); 

Roster roster1 = Roster("051015"); 
roster1.addTimeSlot(slot1); 

TimeSlot slot2(Time(20, 30), Time(22, 0), serverJob, Employee("John", "Doe")); 
roster1.addTimeSlot(slot2); 

file << "\n" + roster1.toString() << endl; 


slot2.setEmployee(Employee("Michael", "Hepburn")); 
file << "\n\n" + roster1.toString() << endl; 


roster1.removeTimeSlot(slot2); 
roster1.addTimeSlot(slot2); 
file << "\n\n" + roster1.toString() << endl; 

file.close(); 
system("PAUSE"); 
return 0; 

Выход:

Дата: 051015 Slot1: Время начала: 12:30, время окончания: 20:15, Job Slot: Сервер (FOH), сотрудник Назначено: Jacob Smith Slot2 : Время начала: 20:30, Время окончания: 22:00, Рабочее место: Сервер (FOH), Назначенный работник: John Doe

Дата: 051015 Slot1: Время начала: 12:30, Время окончания: 20: 15, Job Slot: Server (FOH), Назначенный работник: Jacob Smith Slot2: Время начала: 20:30, Время окончания : 22:00, Job Slot: Server (FOH), Назначенный работник: John Doe

Дата: 051015 Slot1: Время начала: 12:30, Время окончания: 20:15, Слот работы: Сервер (FOH), Сотрудник Назначено: Jacob Smith Slot2: Время начала: 20:30, время окончания: 22:00, Job Slot: Сервер (FOH), сотрудник Назначено: Майкл Хепберн

Выход на второй распечатке следует читать " Назначенный работник: Майкл Хепберн «вместо« Джон Доу ».

Я не могу понять, как сделать программу распознающей изменение в слоте1.

Любая помощь будет оценена, спасибо!

+0

Что делает addTimeSlot? Копирует ли TimeSlot? (*, который является значением по умолчанию в C++ *) – immibis

+0

Вы должны предоставить определение класса TimeSlot для его отладки. – dmedine

ответ

0

Измененный ответ. В этих строках:

TimeSlot slot2(Time(20, 30), Time(22, 0), serverJob, Employee("John", "Doe")); 
roster1.addTimeSlot(slot2); 

file << "\n" + roster1.toString() << endl; 


slot2.setEmployee(Employee("Michael", "Hepburn")); 
file << "\n\n" + roster1.toString() << endl; 

Вы распечатываете roster1 перед добавлением к нему модифицированного слота2.

+0

Я на самом деле распечатываю roster1 оба раза. slot1 и slot2 являются членами вектора в списке1. когда я изменяю slot2, он не изменяет слот2, расположенный в этом векторе. Я думаю, что это проблема с указателем/ссылкой. Я только сейчас начинаю заниматься C++ после того, как некоторое время использовал Java. – Adelphos

+0

Да, но это до того, как вы измените имя. – dmedine

+0

Я предполагаю, что более конкретно я пытаюсь понять, как при изменении слота2 он изменяет слот2 в списке без необходимости его удаления и повторного добавления. – Adelphos

0

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

Вам нужна ссылка как параметр для вашего addTimeSlot(); метод.

Так что прототип должен быть чем-то больше похоже на:

void Roster::addTimeSlot(TimeSlot &); 

И я считаю, что следует сделать трюк.

Смежные вопросы