использование необъявленного идентификатора

0
static void cmd_help(char *dummy)    
{

    struct command *c;
    puts("commands are:");
    c = mscp_commands;
    do {
          printf("%-8s - %s\n", c->name ? c->name : "", c->help);
    } while (c++->name != NULL);

}

struct command mscp_commands[] = {
    ....
};

Я пытаюсь преобразовать программу из C в C++. Квалификация заключается в том, что она компилируется через g++;

Я получаю эту ошибку:

ошибка: использование необъявленного идентификатора "mscp_commands" c = mscp_commands;

Я думаю, что он должен что-то сделать, поскольку функция не может "видеть" команду struct. Может кто-нибудь помочь, пожалуйста?

Теги:

2 ответа

1

В C и C++ все должно быть объявлено или определено перед использованием. Когда компилятор находит идентификатор, который он раньше не видел, например, ваши mscp_commands в c = mscp_commands; он выдает ошибку. Вам нужно переместить определение mscp_commands или хотя бы объявить его как

extern struct command mscp_commands[];

перед использованием этого идентификатора.

Эти языки имеют понятие "форвардная декларация". В таких заявлениях говорится, что имя Blah является структурой или перечислением без каких-либо дополнительных подробностей. Но, по крайней мере, это должно присутствовать. В противном случае это синтаксическая ошибка. В вашем примере ничего не сказано о command.

  • 0
    Не существует такого понятия, как «предварительная декларация» . Единственными понятиями являются декларация и определение . Плюс, есть исключения из вашего провозглашенного «Абсолютно никаких ожиданий » - правило: объявление extern int i; достаточно использовать i . Определение i не обязательно должно быть доступно до его использования. Подобные исключения существуют при использовании указателей или ссылок на типы, которые были только объявлены, но еще не определены.
  • 0
    Вы неправы. Существует такое понятие, как «предварительная декларация». Google, и у вас будет много результатов назад. Например, посмотрите на stackoverflow.com/questions/4757565/c-forward-declaration . Я только что проверил стандарт C ++ 11. Он упоминает эту концепцию несколько раз, например, на страницах 246, 368. Подумайте об изменении или удалении вашего комментария.
Показать ещё 6 комментариев
0

Переехать

struct command mscp_commands[] = {

};

перед функцией cmd_help.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню