Не может появляться в постоянном выражении
В следующей программе на C++:
class matrix {
public:
int n;
double **x;
matrix(int n) : n(n) {
x=new double[n][n];
for (int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
x[i][j]=0;
}
}
}
...
Я получаю следующую ошибку: "n не может появляться в константном выражении". Так как я относительно новичок в cpp, я действительно не знаю, почему возникает эта ошибка (особенно потому, что я сделал почти то же самое с классом, называемым вектором, и там не было никаких проблем) и как ее исправить. Я был бы очень признателен за любую помощь.
1 ответ
Решение
В этом выражении
x=new double[n][n];
все размеры, кроме самого левого, должны быть постоянными выражениями.
Правильный подход
x = new double *[n];
for ( int i = 0; i < n; i++ ) x[i] = new double[n];
for (int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
x[i][j]=0;
}
}
Или, если ваш компилятор поддерживает C++ 2011, тогда это можно сделать проще без явной инициализации в циклах
x = new double *[n];
for ( int i = 0; i < n; i++ ) x[i] = new double[n] {};