使用未声明的标识符

时间:2014-01-27 04:46:17

标签: c++ c

static void cmd_help(char *dummy)    
{

    struct command *c;
    puts("commands are:");
    c = mscp_commands;
    do {
          printf("%-8s - %s\n", c->name ? c->name : "", c->help);
    } while (c++->name != NULL);

}

struct command mscp_commands[] = {
    ....
};

我正在尝试将程序从C转换为C ++。资格是通过g ++编译;

我收到此错误:

  

错误:使用未声明的标识符'mscp_commands'           c = mscp_commands;

我认为它必须对函数无法“看到”struct命令做些什么。有人可以帮忙吗?

2 个答案:

答案 0 :(得分:1)

在C和C ++中,所有内容都应在使用前声明或定义。当编译器找到以前从未见过的标识符时,就像mscp_commands中的c = mscp_commands;一样,它会发出错误。您需要移动mscp_commands的定义或至少将其声明为

extern struct command mscp_commands[];

使用此标识符之前。

这些语言具有“前向声明”的概念。此类声明表示名称Blah是结构或枚举,但未提供任何进一步的详细信息。但至少应该存在这种情况。否则是语法错误。在您的示例中,command没有任何内容。

答案 1 :(得分:0)

移动

struct command mscp_commands[] = {

};

cmd_help函数之前。