Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/161.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 结构的存储大小为';不知道C++;_C++_Struct - Fatal编程技术网

C++ 结构的存储大小为';不知道C++;

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_

当我这样做的时候,我得到以下错误

“错误:“mscp_命令”的存储大小未知”

后来我有:

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[];