2015-11-28 3 views
2

Я попытался объявляющего матрицу, и когда я компилирую, я получаю это:Предупреждение: расширенный списки инициализатора доступны только с -std = C++ 0x или -std = гну ++ 0x

extended initializer lists only available with -std=c++0x or -std=gnu++0x 

И при попытке другой решение, которое я получаю это:

ISO C++ forbids variable length array 'A' (line 16) 

Вот код моего последнего раза:

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

int main() 
{ 

int m, l; 

ifstream MatrixA ("A.txt"); 
MatrixA >> m; 
MatrixA >> l; 

int A [m][l]; 

for (int lineA = 0; lineA <= m; lineA++) 
{ 
    for (int colA = 0; colA <= l; colA++) 
    { 
     A [lineA][colA]; 
    } 
} 

cout << "Matrix A: " << A[m][l] << endl; 

return 0; 

} 
+1

могли бы вы предоставить флаги компилятора? – lrleon

+1

, если вы хотите использовать функции C++ 11, вам нужно будет поместить один из следующих флагов в командной строке (в зависимости от вашей версии компилятора): '-std = C++ 0x' или' -std = c + + 11'. объявление массива c-style с переменными размерами действительно является незаконным в C++, как следует из правильной ошибки. –

+0

, как указано в других комментариях, вы можете использовать переменные. Новая функция C++ 11 - это 'constexpr', которая вычисляется во время компиляции – KostasRim

ответ

5

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

std::vector<std::vector<int> > A(m, std::vector<int>(l)); 
+0

Он также мог использовать 'constexpr', который оценивается во время компиляции. – KostasRim

+1

@ KostasRim: при условии, что размеры матрицы сначала читаются, я не уверен, как здесь будет помогать 'constexpr'. –

+0

вместо чтения значений из файла. он мог бы использовать их как 'constexpr'. – KostasRim

Смежные вопросы