當我宣告我得到的結構時,我有一個ST_transaction_t包含 2 個結構、一個列舉和uint32_t成員的結構。當我從它的結構中洗掉列舉型別的成員時。ST_transaction account1account1': undeclared identifier error
這是有問題的代碼部分:
typedef struct ST_transaction_t
{
ST_cardData_t cardHolderData;
ST_terminalData_t terminalData;
EN_transState_t transState;
uint32_t transactionSequenceNumber;
}ST_transaction_t;
typedef enum EN_transState_t
{
APPROVED, DECLINED_INSUFFECIENT_FUND, DECLINED_STOLEN_CARD, INTERNAL_SERVER_ERROR
}EN_transState_t;
int main() {
ST_transaction_t account1 ;
return 0;
}
現在如果這樣做:
typedef struct ST_transaction_t
{
ST_cardData_t cardHolderData;
ST_terminalData_t terminalData;
//EN_transState_t transState;
uint32_t transactionSequenceNumber;
}ST_transaction_t;
typedef enum EN_transState_t
{
APPROVED, DECLINED_INSUFFECIENT_FUND, DECLINED_STOLEN_CARD, INTERNAL_SERVER_ERROR
}EN_transState_t;
int main() {
ST_transaction_t account1 ;
return 0;
}
它運行良好,那么為什么會EN_transState_t transState導致該錯誤以及如何修復它?
uj5u.com熱心網友回復:
在您的代碼typedef enum EN_transState_t中僅在使用typedef struct ST_transaction_t. 在 C 中,必須先宣告所有型別,然后才能參考它。編譯器自上而下作業。
將宣告typedef enum EN_transState_t移到之前typedef struct ST_transaction_t,您的代碼應該可以作業。
uj5u.com熱心網友回復:
你的問題不是關于變數EN_transState_t transState;本身,而是關于它在代碼中的 typedef 位置,我的意思是當編譯器逐行編譯你的代碼并到達這一行時 EN_transState_t transState;,之前沒有這種型別的宣告,因為在后面的幾行中提到了這種型別,意思EN_transState_t transState;是在這些行之前:
typedef enum EN_transState_t
{
APPROVED, DECLINED_INSUFFECIENT_FUND, DECLINED_STOLEN_CARD, INTERNAL_SERVER_ERROR
}EN_transState_t;
所以你必須:
typedef enum EN_transState_t
{
APPROVED, DECLINED_INSUFFECIENT_FUND, DECLINED_STOLEN_CARD, INTERNAL_SERVER_ERROR
}EN_transState_t;
typedef struct ST_transaction_t
{
ST_cardData_t cardHolderData;
ST_terminalData_t terminalData;
EN_transState_t transState;
uint32_t transactionSequenceNumber;
}ST_transaction_t;
int main() {
ST_transaction_t account1 ;
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/507323.html
