不能出现在常量表达式中

时间:2013-12-01 14:44:26

标签: c++ constructor constant-expression constructor-overloading

在以下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相对较新,我真的不知道为什么会出现这种错误(特别是因为我对一个名为vector的类做了几乎完全相同的事情,并且根本就没有问题)以及如何修复它。 我真的很感激任何帮助。

1 个答案:

答案 0 :(得分:2)

在此表达式中

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] {};