C++ 如何引用嵌套结构?
在结构中,如何调用内部结构? 我现在的代码是C++ 如何引用嵌套结构?,c++,struct,nested,C++,Struct,Nested,在结构中,如何调用内部结构? 我现在的代码是 #include <iostream> #include <string> using namespace std; int N_ITEMS; int N_SEATS; struct ST_SEATS{ struct ITM_TYPE { string name; float price; }; }; int main() { cout << "Enter number o
#include <iostream>
#include <string>
using namespace std;
int N_ITEMS;
int N_SEATS;
struct ST_SEATS{
struct ITM_TYPE {
string name;
float price;
};
};
int main()
{
cout << "Enter number of items: ";
cin >> N_ITEMS;
ST_SEATS seat[3];
seat[1]::ITM_TYPE item[N_ITEMS];
int i = 0;
string name = "";
string input;
float price;
while (i < N_ITEMS)
{
cout << "Input item name: ";
cin >> input;
item[i].name = input;
cout << "item[" << i << "].name SET" << endl;
cout << "Input item price: ";
cin >> price;
item[i].price = price;
cout << "item[" << i << "].price SET" << endl;
i++;
}
i = 0;
while (i < N_ITEMS)
{
cout << "item[" << i << "].name = " << item[i].name << endl;
cout << "item[" << i << "].price = " << item[i].price << endl;
i++;
}
system("pause");
}
用这个
ST_SEATS::ITM_TYPE st_seats;
用这个
ST_SEATS::ITM_TYPE st_seats;
座椅[1]
不是一种类型。进入内部类型槽ST_座椅::ITM_类型
注意:启用C++11功能后,您还可以说
decltype(seat[1])::ITM_TYPE
seat[1]
不是一种类型。进入内部类型槽ST_座椅::ITM_类型
注意:启用C++11功能后,您还可以说
decltype(seat[1])::ITM_TYPE
类型ITM_TYPE
仅存在一次,在ST_SEATS
的范围内。每个ST_座位的类型都不一样。因此,定义数组的正确方法是
ST_SEATS::ITM_TYPE item[N_ITEMS];
但是请注意,您的structST_SEATS
实际上是空的(它不包含任何成员)。它只充当名称空间。因此,应将其替换为命名空间:
namespace ST_SEATS
{
struct ITM_TYPE
{
string name;
float price;
};
}
我现在注意到,您实际上定义了一个由3个ST_席位组成的数组,但根本没有使用该数组。我现在怀疑您可能希望将您的ITM\u类型
数组作为ST\u席位
的成员。但是在这种情况下,您必须直接在结构定义中声明这样的成员
我现在还注意到数组大小是一个变量。在C++中,这是不可能的(一些编译器将它作为本地数组的扩展)。因此我现在认为你真正想要的是:
#包括
结构ST_座椅{
结构ITM_类型{
字符串名;
浮动价格;
};
std::vector items;//向量基本上是一个动态数组
};
int main()
{
cout>N_项;
ST_座椅[3];
座椅[1]。项目。调整大小(N个项目);
std::string name=“”;
std::字符串输入;
浮动价格;
对于(int i=0;i输入;
座位[1]。项目[i]。名称=输入;
std::cout类型ITM\u type
只存在一次,在ST\u SEATS
的范围内。每个ST\u SEATS
的安装没有不同的类型。因此,定义它的数组的正确方法是
ST_SEATS::ITM_TYPE item[N_ITEMS];
但是,请注意,您的structST_SEATS
实际上是空的(它不包含任何成员)。它只充当名称空间。因此,您应该用名称空间替换它:
namespace ST_SEATS
{
struct ITM_TYPE
{
string name;
float price;
};
}
好的,我现在注意到您实际上定义了一个包含3个ST_SEATS
的数组,但该数组根本没有被使用。我现在怀疑您可能希望将您的ITM_TYPE
数组作为ST_SEATS
的成员。但是在这种情况下,您必须直接在结构定义中声明这样的成员
我现在注意到,数组大小是一个变量。在C++中,这是不可能的(虽然有些编译器将它作为本地数组的扩展),所以现在我认为你真正想要的是:
#包括
结构ST_座椅{
结构ITM_类型{
字符串名;
浮动价格;
};
std::vector items;//向量基本上是一个动态数组
};
int main()
{
cout>N_项;
ST_座椅[3];
座椅[1]。项目。调整大小(N个项目);
std::string name=“”;
std::字符串输入;
浮动价格;
对于(int i=0;i输入;
座位[1]。项目[i]。名称=输入;
std::难道我不认为需要行号功能吗?你说的“调用”是什么意思?我想,首先,从你试图做的事情来看,你对结构是什么感到非常困惑。你必须确保你理解事物类型之间的区别,以及这种类型的事物。我希望每个座位都有不同的lis对于项目和价格,我认为embedded struct是实现这一点的方法我想应该有行号功能。你说的“调用”是什么意思?首先,从你似乎要做的事情来看,我想你对什么是结构感到非常困惑。你必须确定你理解事物类型之间的区别,以及这种类型的事物。我希望每个座位都有不同的物品和价格列表,我认为嵌入式结构是实现这一点的方法。预捕获嵌入式循环并将ITM_类型的结构置零(删除该结构的父结构)将适用于项目输入,然后是席位推进,这很好,谢谢,但我需要ST_席位像ITM_类型一样可变,然后使用typeof或等效物。这很好,谢谢,但我需要ST_席位像ITM_类型一样可变,然后使用typeof或等效物。我可以使用命名空间像namespace seat[I]?@Arcticfoxx:没有。但是你实际上并没有以任何方式使用该数组(除了定义你的项数组),因此我在最初写我的答案时并没有真正注意到它。请参阅我的编辑,了解我现在认为你真正想要的内容。我可以使用名称空间,如namespace SEAT[I]?@Arcticfoxx:没有。但是你实际上并没有以任何方式使用该数组(除了定义你的项数组),因此我在最初写我的答案时并没有真正注意到它。有关我现在认为你真正想要的内容,请参阅我的编辑。