Инициализация констант - Error[Pe028]: expression must have a constant value - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Здравствуйте. Помогите решить проблему. Есть код:
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 } };
компилятор выдает 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]} };". Вроде с типами все ОК. Все переменные - константы, указатели - константные на константы. Что не так?

Решение задачи: «Инициализация констант - Error[Pe028]: expression must have a constant value»

textual
Листинг программы
extern CHANNEL Chan0[];
extern CHANNEL Chan1[];
DESC Desc[] = { { 1, Chan0 }, { 2, Chan1 } };

Объяснение кода листинга программы

В данном коде происходит инициализация массива DESC с двумя элементами, где каждый элемент содержит два значения: номер канала и указатель на массив каналов.

  1. extern CHANNEL Chan0[]; - объявление массива Chan0, который содержит некоторое количество каналов.
  2. extern CHANNEL Chan1[]; - объявление массива Chan1, который содержит некоторое количество каналов.
  3. DESC Desc[] = { { 1, Chan0 }, { 2, Chan1 } }; - инициализация массива Desc двумя элементами, где каждый элемент содержит номер канала и указатель на соответствующий массив каналов. Таким образом, список будет выглядеть следующим образом:
  4. Название переменной: Chan0
    • Значение: массив каналов
  5. Название переменной: Chan1
    • Значение: массив каналов
  6. Название переменной: Desc
    • Значение: массив описателей каналов, содержащий два элемента
      • Элемент 1: номер канала - 1, указатель на массив Chan0
      • Элемент 2: номер канала - 2, указатель на массив Chan1

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 3.875 из 5