Инициализация констант - Error[Pe028]: expression must have a constant value - C (СИ)
Формулировка задачи:
Здравствуйте.
Помогите решить проблему.
Есть код:
компилятор выдает 2 ошибки "Error[Pe028]: expression must have a constant value; Error[Pe028]: expression must have a constant value" в строке в указанных местах "DESC Desc[] = { {1,Chans[0]}, {2,Chans[1]} };".
Вроде с типами все ОК. Все переменные - константы, указатели - константные на константы. Что не так?
typedef const struct _DESC DESC, *PDESC;
typedef const struct _CHANNEL CHANNEL, *PCHANNEL;
struct _CHANNEL {
int k;
PDESC pDesc;
};
struct _DESC {
int k;
PCHANNEL ChannelArray;
};
extern const PCHANNEL Chans[];//будет использоваться в других местах (других файлах)
DESC Desc[] = { { 1, Chans[ 0 ] }, { 2, Chans[ 1 ] } };
CHANNEL Chan0[] = { { 1, Desc }, { 2, Desc }, { 3, Desc } };
CHANNEL Chan1[] = { { 1, Desc + 1 }, { 2, Desc + 1 }, { 3, Desc + 1 }, { 4, Desc + 1 } };
const PCHANNEL Chans[] = { { Chan0 }, { Chan1 } };Решение задачи: «Инициализация констант - Error[Pe028]: expression must have a constant value»
textual
Листинг программы
extern CHANNEL Chan0[];
extern CHANNEL Chan1[];
DESC Desc[] = { { 1, Chan0 }, { 2, Chan1 } };
Объяснение кода листинга программы
В данном коде происходит инициализация массива DESC с двумя элементами, где каждый элемент содержит два значения: номер канала и указатель на массив каналов.
extern CHANNEL Chan0[];- объявление массива Chan0, который содержит некоторое количество каналов.extern CHANNEL Chan1[];- объявление массива Chan1, который содержит некоторое количество каналов.DESC Desc[] = { { 1, Chan0 }, { 2, Chan1 } };- инициализация массива Desc двумя элементами, где каждый элемент содержит номер канала и указатель на соответствующий массив каналов. Таким образом, список будет выглядеть следующим образом:- Название переменной: Chan0
- Значение: массив каналов
- Название переменной: Chan1
- Значение: массив каналов
- Название переменной: Desc
- Значение: массив описателей каналов, содержащий два элемента
- Элемент 1: номер канала - 1, указатель на массив Chan0
- Элемент 2: номер канала - 2, указатель на массив Chan1
- Значение: массив описателей каналов, содержащий два элемента