У меня есть функция, которая читает запросы: по отметке времени, текущему этажу и этажу назначения, и она не выводит, как я ожидал.
Все значения моего члена выводятся правильно: отметка времени, текущий этаж и этаж назначения за исключением bool.
Bool выводит 205 вместо 1 или 0 для моего направления.
Elevator::readRequests()
{
ifstream myStream("T1.txt");
while(!myStream.eof())
{
int timestamp ,currentFloor, destinationFloor;myStream >> timestamp >> currentFloor >> destinationFloor;
//cout<< endl <<"The current timestamp is "<< timestamp << "The current floor is " << currentFloor
// << " and the destination floor is " << destinationFloor << endl << endl;
//cout<< endl;
reqNode *temp = new reqNode;
//initialize request node object
temp->timestamp = timestamp;
temp->start = currentFloor;
temp->destination = destinationFloor;
temp->start_time = -1;
temp->finish_time = -1;
temp->calculate_priority();
if(temp->start < temp->destination)
temp->set_dir(true);
else
temp->set_dir(false);
request.push(*temp);//push nodes into the request bank
}
int i = 0;
while( !request.empty() )
{
cout << "Node " << i << " : " << request.front().timestamp << " " << request.front().start << " " << request.front().destination
<< " " << request.front().direction << endl;
request.pop();//popping the request in order to test
i++;
}}
Я пытаюсь получить вывод:
Узел №: метка времени. Текущий (Пользовательский этаж). Назначение (этаж пользователя). Направление (пользователь движется).
Node 0 : 1 3 7 1
Node 1 : 1 2 9 1
Node 2 : 1 7 9 1
Node 3 : 2 4 6 1
Node 4 : 2 4 8 1
Node 5 : 2 1 17 1
Node 6 : 5 1 15 1
Node 7 : 5 5 1 0
Node 8 : 6 17 4 0
Node 9 : 6 4 17 1
Вместо этого я получаю в качестве вывода:
Node 0 : 1 3 7 205
Node 1 : 1 2 9 205
Node 2 : 1 7 9 205
Node 3 : 2 4 6 205
Node 4 : 2 4 8 205
Node 5 : 2 1 17 205
Node 6 : 5 1 15 205
Node 7 : 5 5 1 205
Node 8 : 6 17 4 205
Node 9 : 6 4 17 205
это файл T1.txt:
1 3 7
1 2 9
1 7 9
2 4 6
2 4 8
2 1 17
5 1 15
5 5 1
6 17 4
6 4 17
205
является 0xCD
, Обычно это означает, что вы используете неинициализированную переменную.
Исходя из кода в оригинальном вопросе, вам необходимо скопировать direction
в конструкторе копирования reqNode
, Судя по выводу, он не был скопирован.
Кроме того, так как ваш вектор, кажется, vector<reqNode>
Вам не нужно выделять временный reqNode
с new
, Просто создайте его в стеке и передайте requests.push_back
,
request.push(*temp)
делает копию объекта, который temp
указывает на. В качестве стиля вы должны удалить указатель после выполнения этого, так как этот объект больше не нужен. Более того, создайте его как автоматический объект, а не обновляйте его. С ++ не Java
Поскольку сохраняемая копия имеет значения, отличные от оригинала, предполагается, что конструктор копирования для reqNode
не копирует правильно.