【发布时间】:2020-08-23 19:02:18
【问题描述】:
我正在尝试编写一个函数,该函数将接收多个索引并根据这些索引处的数组中的值执行某些操作。如果我不将数组声明为函数的参数(它将始终对相同的两个数组进行操作),我会得到 X/Y 未在此范围内声明,但如果我尝试声明它们,我会得到“错误:声明'X' 作为多维数组必须具有除第一个之外的所有维度的边界”,并且边界直到运行时才知道。
有没有办法在函数中做到这一点,还是我每次都必须在 main 中显式编写代码?
代码:
double foo(int A, int B, int t){//A, B, and t are indices
int x = X[A][t]-X[B][t]; //X and Y are 2D arrays
int y = Y[A][t]-Y[B][t];
double d;
//do some math ...
return d;
}
int main{
.
.
.
int X[nPeople][tMax]={0};
int Y[nPeople][tMax]={0};
.
.
.
for(int t=0; t<tMax; t++){
for(int n=0; n<nPeople; n++){
foo(n,a,t);
}
}
.
.
.
return 0;
}
【问题讨论】:
-
建议:动态分配
X和Y -
使用
std::vector<std::vector<int>> -
如果你不将数组作为参数传递,它们应该是全局的...
-
这些是 C 风格的数组。整个 sn-p 实际上是 C 代码,而不是 C++,否则
foo将是X和Y是私有成员的类的方法,也很好地解析名称范围。但是对于在编译时不知道大小的声明:是的,要么将它们设为int *并动态分配,要么将它们设为vector实例以提高安全性。 -
Re: 'int X[nPeople][tMax]={0};" -- 如果在编译时数组大小未知,则此代码不是有效的 C++。一些编译器提供了这样的monstrosity 作为扩展。正如其他人所说,使用
std::vector。这就是它的设计目的。