Не может появляться в постоянном выражении

В следующей программе на 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] {};
Другие вопросы по тегам