C++:new表达式中的数组大小必须是常量

3

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

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

矩阵被声明为:

Type* matrix;

maxSize 被声明为:

const int maxSize = 4;

1
考虑只使用std::vector(或者如果大小在编译时固定,则使用std::array)。忘掉旧的C风格数组吧。 - Jesper Juhl
1
maxSize 是如何、何时和在哪里声明和定义的?你能给我们展示一个最小完整可验证示例吗? - Some programmer dude
在C语言中,2D数组是双指针,也就是指向指针的指针。你需要先分配一个指针列表,然后为列表中的每个指针分配一个Type类型的列表。 - jodag
你应该在这里发布确切的错误文本。 - user7860670
1个回答

4
简而言之,new操作符的语法如下:new typename [items_count]。表达式new Type[maxSize][maxSize]试图分配一个Type[maxSize]类型的maxSize数组,并返回指向Type[maxSize]的指针。不能使用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];

maxSize 应该在此上下文中可用作常量表达式。 - Passer By
即使 maxSize 是一个常量表达式,op 的代码也无法工作,因为 matrix 类型与新结果不同。 - user7860670
我并不反对这一点,只是指出使用 Type[maxSize] 是合法的。 - Passer By

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接