所以我有了这个。
#define MAX_MENU_OPTIONS 1
typedef struct _NEW_MENU_OPTION
{
char* name;
int type;
char* opt1;
int value1;
int cycleid;
int cycle_max;
int cycle_min;
int onenter;
} NEW_MENU_OPTION;
NEW_MENU_OPTION menu_options[MAX_MENU_OPTIONS];
然后在我的代码中。
switch(menu_options[menu_location].onenter)
{
case 0:
break;
}
但我在menu_options上有一个红色错误的东西,说“错误:表达式必须有整数或枚举类型”。我真的很困惑,我看不出有什么不对,出了什么问题?
答案 0 :(得分:8)
您发布的代码对我来说很好,CodePad在quick little test中编译得很好。
所以虽然问题没有提及,但我猜你是在Visual Studio工作。
在这种情况下,您看到的错误很可能是 IntelliSense 错误,而不是实际的编译器错误。有时,IntelliSense引擎(使用不同的编译器实现)会混淆并报告您已在代码中修复的错误。我在重构现有代码时经常会注意到这个问题。
修复是构建/编译项目并验证错误消失。重建后,您应该看到一个干净的“错误列表”窗口。
答案 1 :(得分:0)
通常,表达式不必是完整的。表达式可以计算为指针。
但在某些情况下,C需要一个整数值
在这个例子中,有两种这样的情况:
你给switch()的值在这里似乎没问题,因为onenter是int
2.数组索引 - 你没有显示它的类型,也许这就是问题。
答案 2 :(得分:0)
这段代码绝对没有错!
但是你需要确保menu_location
和menu_options[menu_location].onenter
被初始化/分配有效的整数值,如下所示。
int menu_location = 0;
menu_options[menu_location].onenter = 0;
我用gcc
编译了-Wall
选项,发现没问题!