所以我目前正在开发一个用c ++编写的程序,我想做出以下的解释:
methodOne()
{
vector<int> one;
vector<int> two;
... assigning to one and two...
int a = one.size();
int b = two.size();
methodTwo(a, b);
}
methodTwo(int a, int b)
{
int array[a][b];
}
当我尝试这个时,我得到一个错误:a和b必须是常数
我试图将a和b分配给const int a,const int b。但是,这没有任何帮助。我想知道是否有人知道如何解决这类错误。
提前感谢你能给予的任何帮助!
答案 0 :(得分:0)
在程序运行之前必须知道数组的大小。它的大小是其完整类型的一部分,就像元素类型本身一样。
您需要具有动态尺寸的东西。使用大小为* * b的std::vector<int>
methodTwo(int a, int b)
{
std::vector<int> array(a * b);
}
您也可以使用std::vector<std::vector<int>>
,但为什么要麻烦?毕竟,您可以通过相应地计算偏移量来访问一维向量元素,就像它是二维数据结构一样:
methodTwo(int a, int b)
{
std::vector<int> array(a * b);
// ...
int x = 5;
int y = 6;
auto const element = array[y * a + x];
}
答案 1 :(得分:0)
我看到你已经使用了vector,所以你可以用
替换你的数组 typedef std::vector< std::vector<int> > matrix;
matrix name(a, std::vector<int>(b));