Выражение C должно иметь целочисленный или перечислимый тип? - PullRequest
3 голосов
/ 24 декабря 2011

Итак, у меня есть это.

#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 ]

8 голосов
/ 24 декабря 2011

Код, который вы разместили, выглядит хорошо для меня, и CodePad прекрасно его компилирует в быстром небольшом тесте .

Так что, хотя в вопросе об этом не говорится, яЯ предполагаю, что вы работаете в Visual Studio.

В этом случае очень вероятно, что ошибка, которую вы видите, является ошибкой IntelliSense , а не фактической ошибкой компилятора,Иногда механизм IntelliSense (реализованный с использованием другого компилятора) запутывается и сообщает об ошибках, которые вы уже исправили в коде.Я часто замечаю эту проблему при рефакторинге существующего кода.

Исправление состоит в том, чтобы собрать / скомпилировать ваш проект и убедиться, что ошибка исчезла.После перестройки вы должны увидеть чистое окно «Список ошибок».

0 голосов
/ 24 декабря 2011

Нет ничего плохого в этом коде!

Но вы должны убедиться, что menu_location и menu_options[menu_location].onenter инициализированы / присвоены действительные целочисленные значения, как показано ниже.

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

Я скомпилировал его с gcc с параметром -Wall и нашел, что все в порядке!

0 голосов
/ 24 декабря 2011

Как правило, выражения не должны быть целыми.Выражение может указывать на указатель.

Однако в некоторых контекстах С требует целочисленного значения.
В этом примере существует два таких случая:
1. Значение, которое вы задаете switch) - здесь все в порядке, потому что onenter is int.
2. Индекс массива - вы не указали его тип, возможно, это проблема.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...