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++){