Вопрос

Я работал над программой в 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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top