do_未在此范围内声明

时间:2009-08-25 18:01:59

标签: c++

丢失了这部分代码。


    const struct editor_cmd_type editor_table[] =
    {
    /*  {   command         function        }, */

        {   "area",         do_aedit        },
        {   "room",         do_redit        },
        {   "object",       do_oedit        },
        {   "mobile",       do_medit        },
        {   "mpcode",       do_mpedit       },
        {   "hedit",        do_hedit        },

        {   NULL,           0,              }
    };

我得到的错误:

olc.c:652: error: âdo_aeditâ was not declared in this scope
olc.c:653: error: âdo_reditâ was not declared in this scope
olc.c:654: error: âdo_oeditâ was not declared in this scope
olc.c:655: error: âdo_meditâ was not declared in this scope
olc.c:656: error: âdo_mpeditâ was not declared in this scope
olc.c:657: error: âdo_heditâ was not declared in this scope
make: *** [olc.o] Error 1

代码中已经有void do_aeditvoid do_redit等...我缺少什么?

7 个答案:

答案 0 :(得分:1)

你说void do_aedit等是在代码中定义的,但是从编译器错误来看,它听起来像文件中的未定义,olc.c(可能是显示的代码)。是否在显示的代码之前声明了函数?如果它们在另一个文件中,是否包括在内?

答案 1 :(得分:1)

您是否尝试过包含相关的头文件或者在数组之前外部所有函数?

即如果函数原型是

void Function( void* param );

然后添加

extern void Function( void* param );

在数组之前。理想情况下,您希望包含正确的头文件。

答案 2 :(得分:0)

您的代码中看起来有一些非法的空格字符(或者您错误地粘贴了错误。)如果前者尝试通过用单个空格替换所有空格来完全打印代码。

答案 3 :(得分:0)

听起来olc.h并非#included

答案 4 :(得分:0)

代码库:Rom24b6

const来自哪里?猜编辑器,这是代码:

  /* Search Table and Dispatch Command. */
    for ( cmd = 0; editor_table[cmd].name != NULL; cmd++ )
    {
        if ( !str_prefix( command, editor_table[cmd].name ) )
        {
            (*editor_table[cmd].do_fun) ( ch, argument );
            return;
        }
    }

这是虚空的aedit,我相信它们应该已经定义了。

void do_aedit( CHAR_DATA *ch, char *argument )
{
    AREA_DATA *pArea;
    int value;
    char arg[MAX_STRING_LENGTH];

    if ( IS_NPC(ch) )
        return;

    pArea       = ch->in_room->area;

    argument    = one_argument(argument,arg);

    if ( is_number( arg ) )
    {

其余基本相同。

答案 5 :(得分:0)

好的,您需要为olc.c文件中的每个do_函数包含函数原型。你可以这样做:

void do_aedit(CHAR_DATA * ch,char * argument);

只需为olc.c文件顶部缺少的每个函数添加一行,然后重新编译。

答案 6 :(得分:0)

检查do_aeditdo_redit等是否在全局命名空间中,或者是否需要通过命名空间或类名限定。

如果您向我们展示这些功能的定义或声明,可能会有所帮助。