为什么在尝试用c++创建二维数组时会出现此错误
Why Do I get this error when trying to create a bidimensional array with c++?
首先欢迎并感谢您的帮助。我知道当你用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.
}
错误是表达式必须是一个常数值
数组维度必须是常数值的说法并不完全正确。编译器必须知道编译时自动存储持续时间为的数组的维度。
您正试图使用一个函数创建一个数组,该函数允许在运行时期间更改维度。您应该使用标准库中的容器来存储数据。
你的功能也可以这样使用:
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
,它可以在运行时分配给定的大小,但其大小在构建时是固定的,在其使用寿命内不会改变。如果你知道尺寸不会改变,这可能更适合你的需求。不过,我不知道是否有编译器支持它。
您真正想要从这种代码的平静中得到什么?(我不明白,看起来也像编译器)您可以使用为存储二维数组创建一个变量
int[][] Matrix;
或者你可以用初始化一个二维数组
new int[x][y];
或前一行:
int[][] Matrix = new int[x][y];
但是
int Matrix[x][y]
是不正确的声明(我认为)
相关文章:
- 将值从二维数组输出到文本文件
- 在二维数组中查找最小值和最大值?
- 移动二维数组中的字符
- 如何正确填充在堆上分配的二维数组?
- 传递二维数组时出现问题
- 具有随机数的二维数组不会更改
- 如何在C++中获取二维数组中最少的一列数?
- 尝试从动态分配的二维数组 C++ 中读取值时出现分段错误,并在尝试删除它时给出 munmap_chunk():
- 二维数组错误
- 将二维数组传递给函数会产生奇怪的错误
- 二维数组分割错误
- 二维数组索引中的c++错误
- 访问传递给函数的二维数组时出现分段错误
- 为什么在尝试用c++创建二维数组时会出现此错误
- 当我尝试输出一个二维数组时,它输出了错误的数字
- 将二维数组推入矢量并删除数组,但会导致分割错误
- 二维数组分配中的c++分割错误
- 指向二维数组的指针,程序编译时抛出分段错误
- 二维数组初始化错误
- c++操作符重载<<错误.SafeMatrix二维数组