struct的存储大小不为C ++所知

时间:2011-10-14 19:57:58

标签: c++ struct

我这样做时会出现以下错误

“错误:'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 个答案:

答案 0 :(得分:7)

struct command mscp_commands[];是一个定义而不是声明(假设定义了struct command),但它不知道那时的存储大小,因为mscp_commands中的元素数量不是不知道。这是[]*显着不同的情况之一。

但你可以写:

extern struct command mscp_commands[];

这确实是一个声明。

答案 1 :(得分:1)

使用前向声明,编译器无法计算对象的大小。因此错误信息。

另见link