2011-12-24 48 views
3

所以我有这个。C表达式必须有整型或枚举类型?

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

+2

什么是menu_location?它没有在这里展示的代码中的任何地方声明... – codeling 2011-12-24 15:36:24

+0

也许是一个缺少的分号前面的一些行吗?你的代码看起来是正确的... – pmg 2011-12-24 15:38:01

+0

这是一个int,对不起,忘了粘贴它。前面的线也很好。 – 2011-12-24 15:38:24

回答

8

您发布的代码对我来说看起来很好,CodePad在quick little test中编译它就好了。

所以,虽然这个问题没有提到它,但我会猜测你在Visual Studio中工作。

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

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

0

通常,表达式不必是整数。表达式可以评估为一个指针。

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

0

这段代码绝对没有错!

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

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

gcc-Wall选项编译它,发现它很好!

相关问题