我是c ++的新手,只是最近才学习的向量。我有一个planes类,在该类中有一个称为planesList的向量。我需要在另一个称为Flights的类中访问该向量内的对象。我不断遇到段故障,需要帮助。
这是我从planes类学习的向量:
public:
vector<plane*> planeList;
这是flight类,我在其中尝试获取该向量并访问其数据。
void flights::addFlight()
{
flight* flightptr = new flight;
string tempTailnum;
string planeId;
int currnumpilots;
planes* p;
cin.ignore();
cout << "Enter the plane's tailnumber: ";
getline(cin, tempTailnum);
for(int i = 0; i < p->planeList.size(); ++i)
{
cout << "hi" << endl;
if(tempTailnum == p.planeList.at(i)->getTailnumber())
{
tempTailnum = planeId;
}
它进入for循环并显示hi,但随后出现段错误。
答案 0 :(得分:0)
您创建了一个指向Planes类的指针p,但从未对其进行初始化。您需要使用new关键字创建Planes类的新对象,并将其地址分配给p *
planes *p = new planes();
此外,如果您没有提供任何构造函数来实际在planes类中初始化矢量对象,则编译器将调用默认构造函数,该默认构造函数会将矢量对象初始化为0。请记住,您必须使用当动态范围超出范围时,使用delete关键字将动态分配的内存释放给指向免费存储的指针。
您可以做的另一件事(前提是您已经在其他地方初始化了planes对象)是将向量planeList直接传递给函数,如下所示:
//Function declaration and definition
void addFlight(vector<planes*> p)
{}
//function call
addFlight(p.planeList);
,然后使用此向量访问数据。如果要更改其数据,也可以通过引用传递该向量。