2011-11-07 4 views
1

私が定義され、この構造を有する:ダブルポインタ2 strcture配列コンパイルエラー

typedef struct 
{ 
    uint16_t short_addr; 
    uint64_t ieee_addr; 
    uint8_t LQI; 
    uint16_t PANId; 
} CAMERA; 

をそして私はこのようなことの配列を、宣言した:これは定義されており、特定の中で宣言されているすべての

static CAMERA device_list [ MAX_NUMBER_OF_DEVICES ]; 

をモジュール。 ここでは、新しい構造内からメインモジュールからその配列へのポインタを作成したいと考えています。 しかし、私はコンパイルエラーを取得し、私はそれを行う方法についてはあまりよく分かりません。

typedef struct 
{ 
CAMERA * device_list[ MAX_NUMBER_OF_DEVICES ]; 
} main_struct; 
main_struct MAIN_STRUCT; 

しかし、問題は、ポインタの値を割り当てることができないということです。

MAIN_STRUCT.device_list = device_list; 

は、次のコンパイルエラーの原因となった:

Error[Pe137]: expression must be a modifiable lvalue 

それを行うための正しい方法は何ですか?

答えて

0

試してみてください。

typedef struct 
{ 
CAMERA * device_list 
} main_struct; 
main_struct MAIN_STRUCT; 



{ 

    MAIN_STRUCT myMainStruct; 
    myMainStruct.device_list = device_list; 

} 

あなたがメインの構造体へのポインタの配列を作成してやっていることで、あなたは配列に割り当てることができません HTH

マリオ

+0

この方法に問題があります私はこの構造体をデバッガで正しく見ることができません。最初のCAMERA構造体を表示します。これは、CAMERA配列ではなくCAMERAへのポインタとして定義するためです。 – stdcall

+0

使用のプリント* myMainStruct.device_list ;-) –

2

。また

typedef struct 
{ 
CAMERA * device_list; 
} main_struct; 

(。今、あなたはそれがポインタの配列などとして宣言されてい)それはポインタとしてそれを宣言するのに十分だ、main_structにそれは間違って宣言し、それが動作するはずです。

あなたが本当に配列としてそれをしたい場合は、配列として宣言:

typedef struct 
{ 
CAMERA device_list[ MAX_NUMBER_OF_DEVICES ]; 
} main_struct; 

また、新しい配列に他の配列からコピー:

memcpy(MAIN_STRUCT.device_list, device_list, sizeof(CAMERA) * MAX_NUMBER_OF_DEVICES); 
+0

この方法の問題は、私は、デバッガで正しくこの構造を表示することができないということであるあなたがCAMERAへのポインタではなく、カメラとしてそれを定義するように、それだけで、第1のカメラstrctureを示しアレイ。 – stdcall

+0

@Mellowcandle本当に配列が必要な場合にどのようにできるかの例を追加しました。 –

+0

これは機能しません。なぜなら、構造の2つの異なるコピーがあるからです。私はそれをその構造体へのポインタにしたい。 – stdcall

関連する問題