2015-09-30 4 views
0

Я пытаюсь создать многомерный массив, однако, когда я передаю значение const int, я не могу скомпилировать. Ошибка - выражение должно иметь постоянное значение для каждого измерения.Объявление массивов с константными переменными

class Matrix { 

public: 
    Matrix(int rowCount, int columnCount, int scalarInput) { 

     const int row_C = rowCount; 
     const int colum_C = columnCount; 
     const int scalar_C = scalarInput; 

     matrixCalculation(row_C, colum_C, scalar_C); 
    } 


    void matrixCalculation(const int i, const int j, const int s) { 

     int matrixArray[i][j]; // error here, i and j: "expression must have a constant value" 


    } 

}; 

Благодарности

ответ

0

размеры массива должны быть время компиляции постоянной и const не означает, что.

Объект не может изменить его значение после инициализации, но его инициализатор может быть определен во время выполнения (например, const int x = rand()), поэтому, в общем, эти объекты не являются допустимыми кандидатами для измерений массива.

Представляем ... constexpr.

Если вы выберете ключевое слово constexpr перед измерениями, вы сможете начать с хорошего старта. Ваш компилятор не позволит вам разорвать контракт constexpr и, следовательно, позволит вам использовать ваш блестящий новый объект constexpr в качестве измерения массива.

Увы, в этом примере вы :, нарушающий этот контракт, поскольку входы непостоянны. Жесткие куки.

Используйте вместо этого вектор.

+0

Хотя я бы также рекомендовал вектор, вы все равно можете использовать массивы, вам просто нужно распределить их динамически. int ** MatrixArray = new int * [i]; for (int k = 0; k Kirkova

+0

Похоже, мне придется использовать векторы, спасибо за быстрый ответ. –

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