我有这些结构:
struct menu_item{ int id; char *text; }; struct menu_tab{ char *label; unsigned char item_count; struct menu_item *items; }; struct menu_page{ char *label; unsigned char tab_count; struct menu_tab *tabs; }; struct Tmenu{ unsigned char page_count; struct menu_page *pages; };
我想定义整个菜单系统:
struct Tmenu menu_test = { 2, { "F1", 2, { { "File", 8, { {1, "text 1"}, {2, "text2"}, {3, "text3333333"}, {4, "text4"}, {5, "Hello"}, {6, "42"}, {7, "world"}, {8, "!!!!!!!!"} } }, { "File2", 3, { {11, "file2 text 1"}, {12, "blah"}, {13, "..."} } } } }, { "F2", 1, { { "File3", 5, { {151, "The Answer To Life"}, {152, "The Universe"}, {153, "and everything"}, {154, "iiiiiiiiiiiiiiiis"}, {42, "Fourty-Two"} } } } } };
但是当我尝试编译时,我会extra brace group at end of initializer
错误消息extra brace group at end of initializer
获得extra brace group at end of initializer
。
我尝试了许多不同的方法,但没有一个成功。 那么在C中使用复杂的结构是否可能呢?
不,这种用法是不可能的,至少在“旧”(C89)C中是不可能的。结构文字不能用于初始化指向有问题的结构的指针 ,因为这不能解决内存在结构中的位置的问题位于。
struct Tmenu menu_test = { 2, { "F1", 2, {DATAFILE...}, {DATAFILE2...} },
应该
struct Tmenu menu_test = { 2, { "F1", 2, { {DATAFILE...}, {DATAFILE2...} } },
因为struct数组会松开单个大括号的声明。
问题是你声明了一个结构的指针,但实际上你需要一个结构数组。 大多数时间struct name*
和struct name[]
将是“可互换的”(读K&R看它们不是同一个东西),但是在静态初始化的情况下,它必须被声明为一个数组,所以编译器可以期望它具有固定大小,因此它可以确定用于结构的内存量。
我需要改进我的答案,但我的主要观点是我不会期待类似int a* = {3,3,4,5};
编译。 首先,作业的两侧类型不同。 其次,编译器如何知道它是数组的初始化列表而不是结构? 第三,它怎么知道它应该期望4个元素而不是5个?
以上就是c/c++开发分享C:数组结构中的结构数组相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/522911.html