我这样做时会出现以下错误
“错误:'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;
};
答案 0 :(得分:7)
struct command mscp_commands[];
是一个定义而不是声明(假设定义了struct command
),但它不知道那时的存储大小,因为mscp_commands
中的元素数量不是不知道。这是[]
与*
显着不同的情况之一。
但你可以写:
extern struct command mscp_commands[];
这确实是一个声明。
答案 1 :(得分:1)
使用前向声明,编译器无法计算对象的大小。因此错误信息。
另见link