Я использую C ++ Builder и после некоторой помощи в установке переменной const int, чтобы быть размером вектора.
Вот мой код, который работает, просто чтобы показать вам, что работает:
vector<appointment> appointmentVector = calCalendar.getAllAppointments();
const int sizeOfArray = 5;
unsigned int arr[sizeOfArray];
Если я изменю код следующим образом:
vector<appointment> appointmentVector = calCalendar.getAllAppointments();
const int sizeOfArray = appointmentVector.size();
unsigned int arr[sizeOfArray];
Я получаю следующую ошибку:
[Ошибка BCC32] Assessment2.cpp (357): E2313 Требуется постоянное выражение
Могу ли я помочь с этим?
ОБНОВИТЬ
Я задаю этот вопрос, так как у меня проблемы со следующим кодом:
unsigned int arr[2] = {1,8};
unsigned int days;
TMonthCalendar->BoldDays(arr, 1, days);
MonthBoldInfo = days;
Метод BoldDays требует массива int без знака, но я знаю только значения во время выполнения. Можете ли вы посоветовать мне, как найти решение этой проблемы?
Статический массив требует постоянных времени компиляции и, следовательно, второй код никогда не будет компилироваться, потому что размер массива неизвестен во время компиляции. Было бы лучше, если бы вы объявили arr как векторный или динамический массив.
Это основной вопрос C ++, рекомендуется пройтись по книге C ++ для начинающих.
Проблема с вашим кодом заключается в том, что вы присваиваете значение результата неконстантного выражения (значения оцениваются в время выполнения) к константной переменной, значение которой должно быть значением, сгенерированным из константного выражения (значения, оцененные в время компиляции) или буквальный.
Чтобы решить эту проблему, вы не должны использовать const
в sizeOfArray
:
int sizeOfArray = appointmentVector.size();
Кроме того, как только вы решили проблему выше, вы должны создать динамически распределяемый массив:
unsigned int* arr = new unsigned int[sizeOfArray];
Динамически размещаемые массивы позволяют создавать массивы, число элементов которых может быть из значения времени выполнения.
Константное выражение — это то, что компилятор может определить значение. В C ++ размер массива является частью его типа и должен быть задан как константное выражение. Если компилятор не может определить, какое значение имеет выражение, вы не можете использовать его как размер типа массива. Что вы можете сделать, это выделить «массив» в куче и использовать указатель на его первый элемент так же, как вы обычно используете имя массива.