c ++:new-expression中的数组大小必须是常量

时间:2017-07-09 16:16:01

标签: c++ arrays

我试图使用常量整数作为边界声明一个二维数组,但是这个错误仍然存​​在。

template <class Type>
matrixType<Type>::matrixType(){
    h = maxSize;
    w = maxSize;
    matrix = new Type[maxSize][maxSize];
    defaultFill();
}

矩阵声明为:

Type* matrix;

和maxSize声明为:

const int maxSize = 4;

1 个答案:

答案 0 :(得分:1)

简要new运算符具有以下语法:new typename [items_count]new Type[maxSize][maxSize]表达式尝试分配maxSize Type[maxSize]类型的数组,并返回指向Type[maxSize]的指针。无法使用new分配多维数组。使用Type[maxSize]是非法的,因为在编译时不知道maxSize。如果要分配多维数组,则应该为Type分配一个指针数组,然后用新分配的指针填充Type数组。

Type * * matrix = new Type *[maxSize];
for(size_t row = 0; maxSize != row; ++row)
{
    matrix[row] = new Type[maxSize];
}

或作为单个数组

Type * matrix = new Type[maxSize * maxSize];