C表达式必须有整数或枚举类型吗?

时间:2011-12-24 15:34:38

标签: c struct

所以我有了这个。

#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上有一个红色错误的东西,说“错误:表达式必须有整数或枚举类型”。我真的很困惑,我看不出有什么不对,出了什么问题?

3 个答案:

答案 0 :(得分:8)

您发布的代码对我来说很好,CodePad在quick little test中编译得很好。

所以虽然问题没有提及,但我猜你是在Visual Studio工作。

在这种情况下,您看到的错误很可能是 IntelliSense 错误,而不是实际的编译器错误。有时,IntelliSense引擎(使用不同的编译器实现)会混淆并报告您已在代码中修复的错误。我在重构现有代码时经常会注意到这个问题。

修复是构建/编译项目并验证错误消失。重建后,您应该看到一个干净的“错误列表”窗口。

答案 1 :(得分:0)

通常,表达式不必是完整的。表达式可以计算为指针。

但在某些情况下,C需要一个整数值 在这个例子中,有两种这样的情况:
你给switch()的值在这里似乎没问题,因为onenter是int 2.数组索引 - 你没有显示它的类型,也许这就是问题。

答案 2 :(得分:0)

这段代码绝对没有错!

但是你需要确保menu_locationmenu_options[menu_location].onenter被初始化/分配有效的整数值,如下所示。

    int menu_location = 0;
    menu_options[menu_location].onenter = 0;

我用gcc编译了-Wall选项,发现没问题!