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];
但是请注意,您的struct
ST_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];
但是,请注意,您的struct
ST_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:没有。但是你实际上并没有以任何方式使用该数组(除了定义你的
数组),因此我在最初写我的答案时并没有真正注意到它。有关我现在认为你真正想要的内容,请参阅我的编辑。