访问具有对象矢量的对象矢量,该矢量具有来自另一个函数的对象矢量

时间:2014-04-14 04:27:34

标签: c++ pointers vector

我的main中有一个对象,它是一个名为sched的Schedule对象。此对象包含一个名为flight的Flight对象向量,每个flight对象都有一个Seat对象的向量,称为seat。还有更多的东西在继续,但这是我现在遇到麻烦的部分。我想要做的是访问和更改这些向量中的一些变量(将乘客姓名添加到特定航班的座位上并更改该座位的占用状态等)。我想我已经弄清楚我需要将飞行向量的引用传递给正在收集有关乘客信息的函数,我通过将此函数放在Schedule类中来实现:

vector<Flight>& Schedule::getFlightPtr()
{
    return flights;
}

现在如何在调用函数中使用该向量的引用?这是我到目前为止所做的。

string passName;
string fltNum;           //yes, the fltNum should be a string
vector<Flight>* flts;

//get the passenger name for the boarding pass and the flight number
cout << "Enter the Passenger's name: ";
cin.ignore();
getline(cin,passName);
cout << "Enter the Flight#: ";
cin >> fltNum;

//get a pointer to the vector of flights in the schedule
*flts = sched.getFlightPtr();

//locate the proper flight and add information to the seat
for (int idx = 0; idx < flts->size(); idx++)
{
        if (*flts[idx]->getFlightNumber() == fltNum)   //<----error states that flts must
        {                                              //have a pointer type on these 3 lines
            *flts[idx]->setSeatName(passName);         //<----
            *flts[idx]->setSeatOccupied() = true;      //<----
        }
}

感谢您提供有关此问题的任何见解。

好的,现在它正在编译并且似乎正在工作,但是我无法在我的向量中保存任何内容。记住,我在向量中嵌套了向量。我是否需要通过引用传递所有向量?

3 个答案:

答案 0 :(得分:0)

*flts = sched.getFlightPtr();是非法的,因为您尝试取消引用空指针,您需要执行此操作std::vector<Flight>& flights = sched.getFlightPtr();,然后使用flights作为常规vector对象。< / p>

答案 1 :(得分:0)

您也可以从flts删除星号,然后将sched.getFlightPtr()更改为&sched.getFlightPtr()(或让getFlightPtr()返回指针)。

答案 2 :(得分:0)

问题是:

vector<Flight>* flts;

*flts = sched.getFlightPtr();

第一行创建一个指向任何地方的指针。但是你取消引用它,导致未定义的行为。在实践中,可能会发生的情况是程序将随机的一块内存视为其中有vector<Flight>

相反,您需要在实际尝试使用它之前创建vector<Flight>。最简单的方法是用第一行替换:

vector<Flight> flts;

并删除flts上的所有解除引用操作。

您没有为我显示足够的代码以确定您的计划中发生了什么。如果您的意图是引用可能是flights类的成员变量的Schedule(而不是复制它),那么您可以这样做:

vector<Flight> &flts = sched.getFlightPtr();

然后flts直接引用Schedule的成员。 (顺便说一句,这是糟糕的设计,因为它破坏了封装)。