Размер хранилища структуры неизвестен C ++ - PullRequest
0 голосов
/ 14 октября 2011

Я получаю следующую ошибку, когда делаю

"ошибка: размер хранилища 'mscp_commands' не известен"

struct command mscp_commands[]; /* forward declaration */

Позже у меня есть:

struct command mscp_commands[] = {
 { "help",      cmd_help,       "show this list of commands"            },
 { "bd",        cmd_bd,         "display board"                         },
 { "ls",        cmd_list_moves, "list moves"                            },
 { "new",       cmd_new,        "new game"                              },
 { "go",        cmd_go,         "computer starts playing"               },
 { "test",      cmd_test,       "search (depth)"                        },
 { "quit",      cmd_quit,       "leave chess program"                   },
 { "sd",        cmd_set_depth,  "set maximum search depth (plies)"      },
 { "both",      cmd_both,       "computer plays both sides"             },
};

Что не так с форвардом, который таким образом объявляет struct mscp_commands?

Структура команды определена ранее:

struct command {
    char *name;
    void (*cmd)(char*);
    char *help;
};

Ответы [ 2 ]

7 голосов
/ 15 октября 2011

struct command mscp_commands[]; является определением, а не объявлением (при условии, что struct command определено), но оно не знает размер хранилища в этой точке, поскольку число элементов в mscp_commands не известно. Это один из случаев, когда [] заметно отличается от *.

Вы можете написать:

extern struct command mscp_commands[];

которая действительно будет декларацией.

1 голос
/ 15 октября 2011

При предварительном объявлении компилятор не может вычислить размер объекта. Поэтому сообщение об ошибке.

См. Также ссылка

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