C++ 结构的存储大小为';不知道C++;
当我这样做的时候,我得到以下错误 “错误:“mscp_命令”的存储大小未知” 后来我有:C++ 结构的存储大小为';不知道C++;,c++,struct,C++,Struct,当我这样做的时候,我得到以下错误 “错误:“mscp_命令”的存储大小未知” 后来我有: struct command mscp_commands[] = { { "help", cmd_help, "show this list of commands" }, { "bd", cmd_bd, "display board" }, { "ls", cmd_
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_命令有什么不对
前面定义了命令结构:
struct command {
char *name;
void (*cmd)(char*);
char *help;
};
struct命令mscp_命令[]
是一个定义而不是一个声明(假设定义了struct command
),但它不知道此时的存储大小,因为mscp\u命令中的元素数不知道。这是[]
与*
明显不同的情况之一
不过,你可以这样写:
extern struct command mscp_commands[];
这确实是一个声明。使用正向声明,编译器无法计算对象的大小。因此,将显示错误消息
另请参见此以及struct命令的定义在哪里?有了所有成员及其类型的完整列表,如果将原型标记为extern
,它会编译吗?(我不知道这是否可行)如果我这么做,我会得到很多警告:从StrutsMcMpPr[r]@ USE97900中得到的从字符串常量到“char *”[-WWREST字符串]的转换:这是因为您可以将非conchar *绑定到C++中的字符串文字。C++与C不同。如果你想写C,也许写C++,而不是C++。@ USE975 900你需要把你的代码> char */COD>改为<代码> const char */COD> .@ USS975 900——这是你的代码>结构命令< /COD>的错误。如果你想使用这样的字符串,你需要说<代码> const char */<代码> <代码>名称<代码>和<代码>帮助< /代码>。
extern struct command mscp_commands[];