1

当我运行以下代码时:

typedef char *lrfield();

struct lrfields {
char name[26];
lrfield *f;
};

struct lrfields lr_table[] = {
    {"pri_tran_code1", pri_tran_code2},
    {"sec_tran_code", sec_tran_code},
    {"type_code", type_code},
    {"sys_seq_nbr", sys_seq_nbr},
    {"authorizer", authorizer},
    {"void_code", void_code},
    {"",0}
};

char *pri_tran_code2()
{
    return pri_tran_code;
}

*
*

if(second) 
{
     for(bp=lr_table; bp->name[0]; bp++)
     if(strcmp(bp->name, second)==0)
     {
         tmpval=bp->f();
         break;
     }
}

我有这些错误:

error: `pri_tran_code2' undeclared here (not in a function)
error: initializer element is not constant
error: (near initialization for `lr_table[0].f')
error: initializer element is not constant
error: (near initialization for `lr_table[0]')
error: initializer element is not constant
error: (near initialization for `lr_table[1]')

正如您在代码中看到的那样,我在其调用上方定义了“pri_tran_code2”。请帮我解决这个错误。

4

2 回答 2

3

你的声明是错误的。要声明函数(函数指针)类型,请尝试以下操作:

typedef char *(*lrfield)();
于 2012-09-24T14:41:09.490 回答
3

char *pri_tran_code2();在您提及此名称之前添加?或者只是将整个实现移到那里。你在哪里称呼它并不重要,重要的是你在哪里引用它。

于 2012-09-24T14:42:09.973 回答