2011-10-14 100 views
0

當我做這個存儲大小是不知道C++

我得到這個下面的錯誤「錯誤:的「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"    }, 
}; 

這有什麼錯向前聲明結構mscp_commands呀?

命令結構被前面所定義的:

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

並且'struct command'的定義在哪裏?完整列出所有成員及其類型? – abelenky

+1

如果將原型標記爲'extern',它會編譯嗎? (我不知道這是否會起作用) –

回答

7

struct command mscp_commands[];是一個定義不聲明(假設struct command被定義),但是它不知道該點處的存儲大小,因爲元件的數量在mscp_commands未知。這是[]*顯着不同的情況之一。

你可以寫不過:

extern struct command mscp_commands[]; 

這確實是一個宣言。

+0

如果我這樣做,我會從struct命令mscp_commands [] – user975900

+3

@中得到很多「警告:已棄用的從字符串常量轉換爲'char *'[-Wwrite-strings] user975900:那是因爲你可以將非const char *綁定到C++中的字符串文字。 C++與c不同。如果你想寫c,也許寫c,而不是C++? – PlasmaHH

+3

@ user975900您需要將'char *'更改爲'const char *'。 –

1

使用正向聲明編譯器無法計算對象的大小。因此錯誤信息。

另請參閱此link

相關問題