我有一个读取请求的函数:按时间戳,当前楼层和目标楼层,它没有按照我的预期输出。
我的所有成员值都正确输出:时间戳,当前楼层和目的地楼层除了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
答案 0 :(得分:3)
205
是0xCD
。这通常意味着您使用的是未初始化的变量。
根据原始问题中的代码,您需要在direction
的复制构造函数中复制reqNode
。根据输出,它没有被复制。
此外,由于您的向量似乎是vector<reqNode>
,因此您无需使用reqNode
分配临时new
。只需在堆栈上创建它并将其传递给requests.push_back
。
答案 1 :(得分:0)
request.push(*temp)
制作temp
指向的对象的副本。作为一种风格问题,您应该在执行此操作后删除指针,因为不再需要该对象。更好的是,将其创建为自动对象而不是新建它。 C ++不是Java。
由于存储的副本与原始副本的值不同,因此表明reqNode
的副本构造函数未正确复制。