當我運行下面的代碼:如何在c中使用typedef聲明函數時刪除未聲明的函數錯誤?
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」的代碼中看到。請幫我解決這個錯誤。
問題是當你的編譯器到達第一次提到'pri_tran_code2'時,這個函數真的沒有聲明* yet *。你必須在聲明你的'lr_table []'數組之前爲函數原型化。還要修復H2CA提到的typedef – Eregrith
按照Michael Krelin的回答,在聲明函數之前,您仍然會面臨「錯誤:初始化元素不是常量」問題。您只能使用不是常量表達式的'pri_tran_code2'等來初始化函數範圍內的結構成員,而不是文件範圍。 –