2011-07-20 11 views
1

私はこのエラーを解決しようとしていますが、悲惨に失敗しました。 「bearer_slot」のアドレス:割り当て
警告の左オペランドとして必要
左辺値:私はのエラーを得たリストを反復しています:割り当ての左オペランドにエラーの左辺値が必要です

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 
} 

を反復処理しようとしています

多分私は何かが間違っていると思うかもしれませんが、私は本当にエラーが実際には何かを得ていないからです。

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; 

答えて

1

を、あなたは、&bearer_slotに値を代入している。つまり、許可されていない変数bearer_slotのアドレス、( lvalueではありません)、意味がありません。さらに、ループ条件は&bearer_slotの値で、true(常にNULLポインタなので)と評価されるため、ループは永遠に実行されます。このループで何を実行するかについて、より多くのコンテキストを提供する必要があります。ところで、(&x)->yはより簡潔にx.yと書くことができます。これはコードをもっと読みやすくします。

+0

あなたの説明に感謝しますが、私は "変数bearer_slotのアドレスは許されません(それは左辺値ではありません)"という文を得ることはできません。 "@James – heike

+0

' bearer_slot'は変数です。その値は 'bearer_slot = whatever'を使って設定します。 '&bearer_slot'は' bearer_slot'がメモリにどこに格納されているかを示す_pointer_を返します。この変数の物理的位置のこの表現を別の値に変更するのは意味がありません。専門用語では、 '&bearer_slot'は'左辺値ではなく '右辺値です。つまり、値を設定することはできません。 'x + 1 = y;'( 'x'と' y'はintなど)の文と比較してください。 'x + 1'が' rvalue'であるため、これは許されません。 – James

3

あなたがこれを行うことはできません:

&bearer_slot=(&(conn->bearers))->head; 

が私たちを表示msc_ber_list_slotが定義されている方法をあなたの助け

編集、追加の構造体をいただき、ありがとうございます。

は、私はあなたが何かこのようにしたいと想像:forループで

struct msc_ber_list_slot *slot; 
for(slot=conn->bearers.head; slot; slot=slot->next) 
{ 
//asign value here 
} 
+0

なぜ私はそれを行うことができませんか?私は構造体を編集し、あなたの提案を試みましたが、無効な型引数 ' - >'( 'msc_ber_list'を持っています)の別のエラーを返す @cnicutar – heike

+0

@heike 'msc_pdn_con_t'はどのように定義されていますか? – cnicutar

関連する問題