Создание массива с постоянным
-
21-09-2019 - |
Вопрос
Я работал над программой в NetBeans на Linux, используя компилятор GCC, когда при переходе на Visual C ++ в Windows 7 код не смог компилировать, как визуально C ++ expected constant expression
На нескольких строках. На Netbeans я просто сделал что -то похожее на char name[fullName.size()];
, в то время как на визуальном C ++ я пытался, среди прочего,
const int position = fullName.size();
char Name[position];
Как я могу создать постоянную для использования для массива?
Примечание: я знаю о этот вопрос, но есть ли какой-нибудь способ, которым я могу работать без использования векторов, поскольку это потребует повторного записи многих частей программы?
Решение
В VC ++ вы не можете сделать объявления времени выполнения размеров массива стеков, но вы можете делать распределение стека через _alloca
Итак:
const int position = fullName.size();
char Name[position];
становится этим:
const int position = fullName.size();
char * Name = (char*)_alloca(position * sizeof(char));
Это не то же самое, но это так близко, как вы собираетесь получить в VC ++.
Другие советы
Это невозможно в VC ++. Я знаю, довольно грустно :(
Решения включают:
- Создать его на куче
- Сделать это постоянным
Новый стандарт C ++ (C ++ 0x) предлагает функцию «постоянного выражения», чтобы справиться с этим. Для получения дополнительной информации проверьте это вне.
C ++ требует, чтобы размер массива был известен во время компиляции. Если вы не против использовать нестандартное расширение, GCC разрешает код, как вы, обратите внимание, что, хотя это не стандартный C ++, это является Стандарт в C, как C99).
Я также предполагаю, что вы могли бы использовать вектор (в этом конкретном месте) с меньшими проблемами, чем вы, хотя,-довольно много кода, написанного для массива, может работать с вектором только с повторнымкомпилятом и немного или вообще нет переписывания.
Ваш char name[fullName.size()];
является примером массив переменной длины Что, насколько я знаю, не стандартизированы в C ++, поэтому вы находитесь во власти компилятора. [Немного не по теме они являются частью стандарта C99