如何访问数组结构在C ++中的数组结构?

时间:2016-05-31 16:02:13

标签: c++ arrays struct

我正在尝试访问Reservation结构的变量名称,例如这个酒店[SomeIndex] .reservations [AnotherIndex] .name但它不起作用。

如何访问这些变量以填充结构?

PS:它编译,但它在调试器Segmentation Fault中显示。

struct Reservation{
string name;
};

struct Hotel {
string name;
Reservation *reservations;
};



int main()
{
    struct Hotel *hotel;
    hotel = new Hotel[20];
    hotel->reservations=new Reservation[10];


    hotel[9].name="Olympus Plaza";
    hotel[9].reservations[5].name="John Doe";

    cout<<"Hotel: "<<hotel[9].name<<" Name: "<<hotel[9].reservations[5].name<<endl;

return 0;   
}

2 个答案:

答案 0 :(得分:1)

hotel->reservations=new Reservation[10];相当于hotel[0].reservations=new Reservation[10];。您已初始化hotel[0],但没有hotel的其他元素 - 特别是hotel[9]

看起来你需要的是为HotelReservation定义构造函数,将其所有成员初始化为明确定义的值。

我强烈建议你使用std::vector而不是原始数组;数组是一项高级功能,很容易出错。

答案 1 :(得分:1)

您未正确初始化预订。使用原始指针正确执行此操作非常困难且容易出错,并且绝对不建议在C ++中使用。

首先,使用std::vector<Hotel>代替原始数组Hotel *。向量是普通的C ++&#34;数组&#34;对象。

然后,您也可以使用Reservation *替换Hotel结构中的原始std::vector<Reservation>指针。

这使得更容易修复实际错误:缺少初始化。

您所做的是创建20家酒店,然后为第一家酒店创建10个预订!然后,您尝试访问第9家酒店的预订,其中有一个未初始化的指针指向随机数据。这意味着行为未定义:在这种情况下,分段错误是系统向您显示您正在访问不属于您的数据的方式。

您需要一个循环来为每家酒店创建预订,或者如果您只想在第9家酒店预订,您需要指定其索引。

使用std::vector非常简单:

#include <vector>

struct Reservation {
    string name;
};

struct Hotel {
    string name;
    vector<Reservation> reservations;
    // if you have no "using namespace std", then it's "std::vector".
};

然后您可以为正确的酒店创建预订:

int main()
{
    vector<Hotel> hotel(20);
    hotel[9].reservations.resize(10);

    hotel[9].name="Olympus Plaza";
    hotel[9].reservations[5].name="John Doe";

    cout<<"Hotel: "<<hotel[9].name<<" Name: "<<hotel[9].reservations[5].name<<endl;

    return 0;   
}