Хобрук: Ваш путь к мастерству в программировании

значение параметра нельзя использовать как константу c++

void merge(vector<Flight>& data, int low, int high, int mid, string criteria)
{
int i, j, k, temp[high - low + 1];
...

Возникает ошибка: «значение параметра «высокий» (объявленное в строке 100) не может использоваться как константа». В сети мне не удалось найти подходящего ответа на этот вопрос.


  • Вы пытаетесь использовать high в качестве длины массива в объявлении. Как говорит вам компилятор, это невозможно. 28.11.2017

Ответы:


1

high - low + 1 должно быть постоянным выражением, вычисляемым во время компиляции в C++. (C++ не поддерживает массивы переменной длины.)

А это не так, поэтому компилятор выдает диагностику.

Простое решение — использовать std::vector<int> в качестве типа для temp.

28.11.2017
  • вот так: vector <Flight>* temp = new vector<Flight>[high - low + 1];? 28.11.2017
  • Почти, но отбросьте тип указателя. Не нужно. 28.11.2017
  • если я отбрасываю тип указателя, я получаю: не существует подходящего конструктора для преобразования из std::vector‹Flight, std::allocator‹Flight›› * в std::vector‹Flight, std::allocator‹Flight››. 28.11.2017
  • Тип вектора должен быть int, чтобы соответствовать тому, что вы хотите для temp. то есть std::vector<int> temp(high - low + 1); 28.11.2017
  • Я сделал ошибку в ОП. Я изменил тип temp, потому что я собираюсь перенести что-то из него в vector<Flight> data позже в коде, а это значит, что мне нужно, чтобы это было vector<Flight> вместо vector<int>. 28.11.2017
  • std::vector<Flight> temp(high - low + 1); будет работать, если Flight имеет необходимые конструкторы. 28.11.2017
  • Новые материалы

    Мой процесс подачи заявки в Школе программного обеспечения и дизайна Тьюринга
    Мой последний пост на Medium был в конце августа, и в нем я пообещал написать еще раз, рассказывая историю моего процесса подачи заявки в Школу программного обеспечения и дизайна Тьюринга ...

    Генерация ваших собственных удивительных QR-кодов с использованием Python
    QR-код (код быстрого ответа) — это разновидность матричных штрих-кодов (или двумерных штрих-кодов), изобретенных в 1994 году японской автомобильной компанией Denso Wave . Штрих-код —..

    Прогресс в технологии Трансформеров часть 3
    Многомасштабный управляющий сигнальный преобразователь для бесфазного синтеза движения (arXiv) Автор: Линтао Ван , Кун Ху , Лей Бай , Юй Дин , Ваньли Оуян , Чжиюн Ван . Аннотация:..

    Представляем поддержку компонентов Vue.js. Мгновенный HMR и многое другое.
    Хотя у FuseBox уже был плагин Vue, он был базовым и не имел многих функций, которые делали работу с Vue.js такой приятной. Однако с этим выпуском мы рады сообщить, что в FuseBox..

    Приключения в Javascript, часть 1
    Я продолжаю думать о том, чтобы писать больше, но чем больше я думаю об этом, тем меньше я это делаю. Итак, сегодня я перестал думать и начал писать. Отсюда можно только спускаться… В..

    Понимание дженериков в TypeScript: подробное руководство
    Введение TypeScript, строго типизированный надмножество JavaScript, хорошо известен своей способностью улучшать масштабируемость, удобочитаемость и ремонтопригодность приложений. Одной из..

    Учебные заметки JavaScript Object Oriented Labs
    Вот моя седьмая неделя обучения программированию. После ruby ​​и его фреймворка rails я начал изучать самый популярный язык интерфейса — javascript. В отличие от ruby, javascript — это более..