Ошибка компиляции массива с двумя указателями - PullRequest
1 голос
/ 07 ноября 2011

У меня определена эта структура:

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 

Какой правильный способ сделать это?

Ответы [ 2 ]

2 голосов
/ 07 ноября 2011

Вы не можете назначить массив.Вы также объявляете это неправильно в main_struct, достаточно объявить его как указатель (прямо сейчас он объявлен как массив указателей.)

typedef struct
{
 CAMERA * device_list;
} 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 голосов
/ 07 ноября 2011

Попробуйте:

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



{

   MAIN_STRUCT myMainStruct;
   myMainStruct.device_list = device_list;

}

С помощью того, что вы делаете, вы создаете массив указателей на главную структуру;hth

Mario

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...