C++ C+中的嵌套结构JSON样式+;

C++ C+中的嵌套结构JSON样式+;,c++,json,visual-c++,struct,C++,Json,Visual C++,Struct,我试图显式初始化嵌套的结构,但在代码中找不到任何错误。我使用Visual Studio 2013与Visual C++编译器。当试图编译下面的代码时,我收到以下错误消息:“编译器中发生了内部错误。” //参数决定将显示哪个菜单(0、1或2)。 int菜单(int n){ 结构菜单{ 结构菜单对象{ 字符串查询; 字符串选择[5]; }; 菜单(obj菜单),; }; 菜单\u对象菜单[3]={ { “水果类型(1-5):”, { “1.苹果-1.00\n”, “2.橙色-2.00\n”, “3.

我试图显式初始化嵌套的
结构
,但在代码中找不到任何错误。我使用Visual Studio 2013与Visual C++编译器。当试图编译下面的代码时,我收到以下错误消息:“编译器中发生了内部错误。”

//参数决定将显示哪个菜单(0、1或2)。
int菜单(int n){
结构菜单{
结构菜单对象{
字符串查询;
字符串选择[5];
};
菜单(obj菜单),;
};
菜单\u对象菜单[3]={
{
“水果类型(1-5):”,
{
“1.苹果-1.00\n”,
“2.橙色-2.00\n”,
“3.香蕉-3.00\n”,
“4.蓝莓-5.00\n”,
“5.黑莓-8.00\n”
}
},
{
“蔬菜类型(1-5):”,
{
“1.西兰花-2.00\n”,
“2.菠菜-4.00\n”,
“3.羽衣甘蓝-6.00\n”,
“4.花椰菜-8.00\n”,
“5.辣木-10.00\n”
}
},
{
“购物者人数:”,
{
"",
"",
"",
"",
""
}
}
};

cout发现内部编译器错误总是很有趣的。首先,您应该将测试代码提交给MS,以便他们能够修复该问题

其次,由于问题在于
struct
中数组中
string
对象的初始化,我们只需要将它们放入匿名
struct
中,以实现解决方法

将您的
菜单\u obj
结构更改为如下所示,它将很好地编译

struct Menus_obj {
  struct Menu_obj {
    string query;             
    struct { 
      string choices[5]; 
    };
  };
  Menu_obj Menu;
};

您的结构定义没有问题。代码中的错误可能是运行时未定义的行为和崩溃,因为您可能正在访问超出其边界的数组(
n
未进行范围检查)。这里有一个可运行的示例:@DmitryLedentsov如果您看到上面的注释,n的条件仅为0、1或2。正如您所看到的,只有三个嵌套的
结构
。问题被证明是一个容器故障,
字符串
字符串数组
不被接受为数组中的同级节点E>结构> <代码> >参见安迪的HAKE。这样的代码可能不遵守<代码> OPC 。最好不要这样做。<代码>不容易扩展,但不容易修改。< /代码>不需要黑客,请参见我的链接中的可运行代码。@ AntiMoron请详细说明一下。我知道这不是典型的C++风格。写什么更好?很多,这就成功了。我真的想过要这么做。干得好,再次感谢!匿名结构的成员声明在哪里?
struct Menus_obj {
  struct Menu_obj {
    string query;             
    struct { 
      string choices[5]; 
    };
  };
  Menu_obj Menu;
};