C++ 队列未添加对象-C++;11
我有两个自定义类,C++ 队列未添加对象-C++;11,c++,c++11,stl,queue,C++,C++11,Stl,Queue,我有两个自定义类,乘客和电梯,包含在乘客.h头文件中: #include <iostream> #include <queue> #include <vector> using namespace std; class Passenger { public: explicit Passenger(int startTime, int startFloor, int endFloor, int waitTime){ this
乘客
和电梯
,包含在乘客.h
头文件中:
#include <iostream>
#include <queue>
#include <vector>
using namespace std;
class Passenger
{
public:
explicit Passenger(int startTime, int startFloor, int endFloor, int waitTime){
this->startTime = startTime;
this->startFloor = startFloor;
this->endFloor = endFloor;
this->waitTime = waitTime;
}//end constructor
void increaseWait(int increase){
this->waitTime += increase;
}
int getWait(){
return this->waitTime;
}
int startTime, startFloor, endFloor, waitTime;
}; //end passenger
class Elevator
{
public:
explicit Elevator(string the){
status = "STOPPED";
passengerCount = 0;
name = the;
}//end constructor
int addtoQueue(Passenger person){
if (this->passengerCount < 8){
this->pickupQueue.push(person);
return 0;
}else{
cout << "Error -- full" << endl;
return 1;
} //end
} //end addtoQueue
void changePassengerCount(int change){
passengerCount += change;
}
string getStatus(){
return status;
}
void setStatus(string status){
status = status;
}
void addStop(int location){
stops.push(location);
}
int getStops(){
return stops.size();
}
string getName(){
return name;
}
int getRoute(){
return stops.front();
}
bool checkCount(){
if (passengerCount > 8){
return false;
}else{
return true;
}
}
int printCount(){
return passengerCount;
}
void printQueue(){
queue<int> copy = stops;
while(!copy.empty()){
cout << copy.front() << " ";
copy.pop();
}
cout << endl;
}
private:
string status;
queue<Passenger> pickupQueue;
int passengerCount;
queue<int> stops;
string name;
}; //end passenger
我得到的结果如下:
adding passenger 0 to elevator: elevatorOne because of condition 1
Queue Size: 1
Passenger Count: 1
adding passenger 1 to elevator: elevatorOne because of condition 1
Queue Size: 1
Passenger Count: 1
adding passenger 2 to elevator: elevatorOne because of condition 1
Queue Size: 1
但我们希望看到:
adding passenger 0 to elevator: elevatorOne because of condition 1
Queue Size: 1
Passenger Count: 1
adding passenger 1 to elevator: elevatorOne because of condition 1
Queue Size: 2
Passenger Count: 2
adding passenger 2 to elevator: elevatorOne because of condition 1
Queue Size: 3
Passenger Count: 3
etc为一个愚蠢的问题道歉 替换:
for (Elevator currElevator : elevators){
与:
for(int j=0;j
所有对电梯的调用都解决了这个问题
我不确定,在这个时候,为什么会有影响,但会更新这个答案与进一步的研究
更新
根据更正:
发生这种情况的原因是基于范围的for循环中的
currLiverter
是Liverts
向量中的电梯的副本。如果将基于范围的for循环声明为for(Liverter&currLiverter:Liverts
)它应该可以工作,因为现在currLiverter
是对Liverts
向量中的元素的引用,而不是副本。代码太多了。制作一个我想少发布的文件,但我认为显示正在创建的乘客向量非常重要。我应该不应该吗?你是说,为了重现错误,上述代码中的每一项功能都需要呈现?这是一个依赖于所有这些逻辑位之间的交互作用的bug?您已经尝试消除上述代码的部分缺陷,如果其中一个被删除,bug就会消失?因为,如果没有,那就不是一个问题。我们每天会收到数千条帖子。您可以缩小范围,我们将修复它。:)祝你好运。这是正确的。为了复制错误,理解这两个自定义类很重要,因为这是错误产生的地方;在这些类中。因此,头文件必须存在。在main函数中,它可能很重要(如果我回答这个问题,我认为是的)。发生这种情况的原因是,基于范围的for
循环中的currLidder
是电梯
向量中电梯的副本。如果您将基于范围的for循环声明为for(电梯和currLidder:电梯)
它应该可以工作,因为现在currLivert
是对Liverts
向量中元素的引用,而不是副本。
for (Elevator currElevator : elevators){
for (int j = 0; j < elevators.size(); j++){