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. Может кто-нибудь помочь, пожалуйста?
В C и C++ все должно быть объявлено или определено перед использованием. Когда компилятор находит идентификатор, который он раньше не видел, например, ваши mscp_commands
в c = mscp_commands;
он выдает ошибку. Вам нужно переместить определение mscp_commands
или хотя бы объявить его как
extern struct command mscp_commands[];
перед использованием этого идентификатора.
Эти языки имеют понятие "форвардная декларация". В таких заявлениях говорится, что имя Blah
является структурой или перечислением без каких-либо дополнительных подробностей. Но, по крайней мере, это должно присутствовать. В противном случае это синтаксическая ошибка. В вашем примере ничего не сказано о command
.
extern int i;
достаточно использовать i
. Определение i
не обязательно должно быть доступно до его использования. Подобные исключения существуют при использовании указателей или ссылок на типы, которые были только объявлены, но еще не определены.
Переехать
struct command mscp_commands[] = {
};
перед функцией cmd_help
.
mscp_commands
после того, как пытаетесь его использовать.