表达式必须具有恒定值,Visual Studio错误E0028

问题描述 投票:0回答:2
#define max 40
...
void transpose(int matrix[][max], int* row, int* col)
{
    int data[*row][max]; //expression must have a constant value
    for (int i = 0; i < *row; i++)
    {
        for (int j = 0; j < *col; j++)
        {
            data[i][j] = matrix[i][j];
        }
    }
...

我尝试在int之前放置'const',但它仍在[* row]处显示此错误,为什么会发生此错误以及如何解决它?

c
2个回答
0
投票

此:

int data[*row][max];

这是错误的,因为第一个索引必须是常量值,而不是指针:

int data[row][max];

0
投票

您在代码段中使用的唯一编译时常量是max。您可能不使用运行时常量来声明数组。可变长度数组不是标准的C ++功能。

您必须像这样动态分配数组

int ( *data )[max] = new int[*row][max]; 

当然,当不再需要该阵列时,您将需要释放分配的内存。

© www.soinside.com 2019 - 2024. All rights reserved.