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

char *pri_tran_code2();この名前を言う前に追加しますか? または、実装全体をそこに移動するだけです。どこで呼ぶかは問題ではありません。重要なのは、どこで参照するかです。

于 2012-09-24T14:42:09.973 に答える
3

あなたの宣言は間違っています。関数 (関数ポインター) 型を宣言するには、代わりにこれを試してください。

typedef char *(*lrfield)();
于 2012-09-24T14:41:09.490 に答える