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

How to Access an array Struct Inside an array Struct in C++?

本文关键字:数组 结构 内部 访问 C++      更新时间:2023-10-16

我正在尝试访问Reservation结构的变量名称,如此hotel[SomeIndex].breservations[AanotherIndex].name,但它不起作用。

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

PS:它可以编译,但在调试器中显示"分段故障"。

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;   
}

您没有正确初始化保留。使用原始指针正确地执行此操作既困难又容易出错,在C++中绝对不建议这样做。

首先,使用std::vector<Hotel>而不是原始数组Hotel *。向量是普通的C++"数组"对象。

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

这样可以更容易地修复实际错误:缺少初始化。

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

您需要一个为每个酒店创建预订的循环,或者如果您只想在第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;   
}

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

看起来您需要的是为HotelReservation定义构造函数,将它们的所有成员初始化为定义良好的值。

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