1

首先欢迎并感谢您的帮助。我知道当你用 C++ 创建一个数组时,索引必须是一个常量值,但我仍然得到同样的错误,让我复制并粘贴代码,以便你理解我在说什么:

const int four = 4, five=5 , six = 6, seven = 7, eight = 8, nine = 9, ten = 10, eleven = 11, twelve = 12, thirteen = 13, fourteen = 14;

这是我的常数,对吧?,现在看看这个:

switch(random_number)
{
case 4:   GenerarMatrix(four,four);         break;
case 5:   GenerarMatrix(five,five);         break;
case 6:   GenerarMatrix(six,six);           break;
case 7:   GenerarMatrix(seven,seven);       break;
case 8:   GenerarMatrix(eight,eight);       break;
case 9:   GenerarMatrix(nine,nine);         break;
case 10:  GenerarMatrix(ten,ten);           break;
case 11:  GenerarMatrix(eleven,eleven);     break;
case 12:  GenerarMatrix(twelve,twelve);     break;
case 13:  GenerarMatrix(thirteen,thirteen); break;
case 14:  GenerarMatrix(fourteen,fourteen); break;
}

我正在调用以下函数:

void GenerarMatrix( const int x, const int y)
{   
  int Matrix[x][y]; // Here I get an error, WHY if x and y are constant variables.

}

错误是表达式必须是一个常量值

4

2 回答 2

2

数组维度必须是常数值并不完全正确。编译器必须在编译时知道具有自动存储持续时间的数组的维度。

您正在尝试使用允许尺寸在运行时更改的函数创建一个数组。您应该使用标准库中的容器来存储您的数据。

您的函数也可以像这样使用:

int i, j;
std::cin >> i; // Read value from standard input during program execution.
std::cin >> j;

GenerarMatrix(i, j);

这是不允许的。这就是为什么编译器会给你一个错误。

声明为的变量const与编译时可用的变量不同。声明一个const变量并用运行时给定的值初始化它是完全可以的。例如:

int i;
std::cin >> i; // Value given at run time
const int j = i; // Ok to initialize constant variable with i.

您可以使用以下方法定义您的函数std::vector

void GenerarMatrix(const int x, const int y) {
    std::vector<std::vector<int>> Matrix(x, std::vector<int>(y, 0)); // Init to 0

    // ...
}

现在,您可以像使用数组一样访问元素,例如Matrix[x][y],它可以使用在运行时给定的维度。

另外:在即将到来的标准C++14中引入了一个新容器std::dynarray,它std::vector可以在运行时分配一个给定的大小,但它的大小将在构造时固定,并且在其生命周期内不会改变。如果您知道尺寸不会改变,这可能更适合您的需求。我不知道是否有任何编译器支持它。

于 2013-07-20T17:26:35.093 回答
0

你真正想要从这种和平的代码中得到什么?(我不明白,看起来也像编译器)您可以创建一个用于存储二维数组的变量:

int[][] Matrix;

或者你可以初始化一个二维数组:

new int[x][y];

或前一行:

int[][] Matrix = new int[x][y];

int Matrix[x][y]

是不正确的声明(我认为)

于 2013-07-21T11:10:31.570 回答