C ++ массив Visual Studio 2010 против Bloodshed Dev-C ++ 4.9.9.2 - PullRequest
0 голосов
/ 01 мая 2011

Этот код прекрасно компилируется в Bloodshed Dev-C ++ 4.9.9.2, но в Visual Studio 2010 я получаю ошибку: выражение должно иметь постоянное значение. Как создать массив после ввода пользователем информации о размере массива без использования указателей?

#include <cstdlib>
#include <iostream>
using namespace std;

int main()
{
    int size = 1;
    cout << "Input array size ";
    cin >> size;
    int array1[size];
    system("PAUSE");
    return 0;
}

Ответы [ 3 ]

3 голосов
/ 01 мая 2011

Используйте std::vector вместо массива (обычно хорошая идея в любом случае):

std::vector<int> array1(size);

Если вам не все равно, вы видите разницу не от самого Dev-C ++, а от gcc / g ++. То, что вы используете, - это нестандартное расширение C ++, которое, как оказалось, реализует g ++, а VC ++ нет.

0 голосов
/ 01 мая 2011

или

int array1 = new int[size];

будет работать так же, как я полагаю (прошло месяц или 3 с тех пор, как я последний раз касался C ++)

Но на самом деле, если вы используете C ++, используйте std :: vector, гораздо более гибкий.

0 голосов
/ 01 мая 2011

Возможность определения размера автоматических массивов с помощью переменной является частью C, а не частью C ++, и является расширением, которое GCC, похоже, хочет навязать всем нам. И DevC ++ - это безобразный кусок кр * р, хотя здесь он не виноват. для изменения (это целиком и полностью GCC) - я не могу представить, почему вы (или кто-либо еще) хотели бы использовать его.

Вы должны действительно скомпилировать свой код C ++ с помощью GCC с флагами, которые предупреждают вас о подобных вещах. Я предлагаю -Wall и -Pedantic как минимум.

...