Выражение должно иметь константное значение c массив

Доброго времени суток. Я не очень-то знаю С++, но очень нужно написать одну библиотеку для использования в C#. Не могу создать массив с длинной зависящей от другого массива.

Ошибка: выражение должно иметь константное значение

По-моему надо создать указатель для определения размера массива или что-то иное. Но я не знаю как.

  • Вопрос задан более двух лет назад
  • 253 просмотра

Более того, у вас необъявленная переменная i =)

Допустим, вы ошиблись, выпиливая лишний код, пусть эта переменная вычисляется у вас в рантайме (т.е. она не являтся константой). Внутри метода вы пытаетесь создать массив на стеке. Для этого компилятору важно знать заранее (в compile-time), какой буфер там резервировать, т.е. необходима константа или константное выражение, о чем и сказано в сообщении об ошибке.

Но в С# же это было не обязательно, что же нам ответит на это Рихтер?

Писал программу на CodeBlocks, всё работает исправно, но при переходе на Visual Studio начал выдавать ошибку "выражение должно иметь константное значение. Подскажите, как исправить или в чём суть ошибки, ибо при обозначение константой возникает другая ошибка " выражение должно быть допустимым для изменения левостороним значением"

Закрыт по причине того, что не по теме участниками user7860670, Эникейщик, 0xdb, Jarvis_J, aleksandr barakin 28 дек ’18 в 9:47 .

Похоже, этот вопрос не соответствует тематике сайта. Те, кто голосовал за его закрытие, указывали следующую причину:

  • "Вопросы с просьбами помочь с отладкой («почему этот код не работает?») должны включать желаемое поведение, конкретную проблему или ошибку и минимальный код для её воспроизведения прямо в вопросе. Вопросы без явного описания проблемы бесполезны для остальных посетителей. См. Как создать минимальный, самодостаточный и воспроизводимый пример." – user7860670, Эникейщик, 0xdb, Jarvis_J, aleksandr barakin

Если вопрос можно переформулировать согласно правилам, изложенным в справке, отредактируйте его.

5 Iceman [2014-06-16 16:41:00]

Я создаю массив в стеке как

Однако я получаю ошибку компиляции: "выражение должно иметь постоянное значение", хотя размер является константой. Я могу использовать макрос

Но мне интересно, почему size отмеченный const вызывает ошибку компиляции.

2 ответа

14 Решение AnT [2014-06-16 16:53:00]

В ключевом слове C const не имеет ничего общего с константами. В языке C по определению термин "константа" относится к буквальным значениям и константам перечисления. Это то, что вам нужно использовать, если вам действительно нужна константа: либо используйте значение literal (укажите макрос, чтобы указать постоянное имя), либо используйте константу перечисления.

(Читайте здесь для более подробной информации: Должен ли я предпочитаю константы над define?)

Кроме того, в C99 и более поздних версиях языка можно использовать непостоянные значения в качестве размеров массива для локальных массивов. Это означает, что ваш код должен компилироваться в современном C, хотя ваш size не является константой. Но вы, по-видимому, используете старый компилятор, поэтому в вашем случае

3 Yann [2014-06-16 16:50:00]

Ответ находится в другом вопросе stackoverflow, ЗДЕСЬ

потому что объекты C, объявленные с помощью модификатора const, не соответствуют действительности константы. Лучшее имя для const, вероятно, будет только для чтения — что это действительно означает, что компилятор не позволит вам изменить его. А ты нужны истинные константы для инициализации объектов со статическим хранилищем (I подозрительный regs_to_read является глобальным).

Оцените статью
Добавить комментарий