我試圖解決這個錯誤,但失敗慘敗。我已經聲明如下迭代通過列表:作爲左操作數所需的錯誤左值
msc_con_list_slot msc_slot;
memset(&msc_slot, 0, sizeof(msc_slot));
msc_pdn_con_t*conn = &msc_slot.conn;
msc_ber_list_slot bearer_slot;
memset(&bearer_slot, 0, sizeof(bearer_slot));
msc_ber_t *bearer = &bearer_slot.bearer;
我的代碼,並試圖重複其
for(&bearer_slot=(&(conn->bearers))->head; &bearer_slot; &bearer_slot=(&bearer_slot)->next)
{
//asign value here
}
我得到了一個錯誤:因分配
警告的左操作數
左值:「bearer_slot」的地址將永遠評估爲'真'
也許我會錯過一些東西,因爲我實際上並沒有得到什麼錯誤。感謝您的幫助
編輯附加結構:
typedef struct {
int id;
} msc_ber_t;
typedef struct _msc_ber_list_slot {
msc_ber_t bearer;
struct _msc_ber_list_slot *next, *prev;
} msc_ber_list_slot;
typedef struct {
msc_ber_list_slot *head, *tail;
} msc_ber_list;
感謝您的解釋,但我仍然無法得到「變量bearer_slot的地址,這是不允許的(它不是左值)並且沒有意義」的句子。@James – heike
'bearer_slot'是一個變量。你可以使用'bearer_slot = whatever'來設置它的值。 '&bearer_slot'給你一個_pointer_,告訴你'bearer_slot'存儲在內存中的位置。將變量的物理位置表示更改爲另一個值是沒有意義的。用技術術語來說,'&bearer_slot'是一個'rvalue',而不是'lvalue'--也就是說,你不能設置它的值。與'x + 1 = y;'(其中'x'和'y是ints)的語句比較 - 這是不允許的,因爲'x + 1'是一個'右值'。 – James