0

我有一个填充二维数组的循环,我想将这个填充创建的值传递给一个函数来进行其他计算。我是 C++ 的初学者,所以清晰的解释会很有帮助。这是我的代码:

for (int car = 1; car <= 27; car++) {

    int test[27][3] = {{car, mpg[car], speed[car]}};

    float speed = speed[car];

    timeGen(speed);

    cout << car << "\t" << mpg[car] << "\t" << speed[car] << endl;
}

这是timeGen功能:

float timeGen(float x)
{
int distance = 50;
float speed = x;
float time = distance/x;
return time;
}

似乎一切都会正常工作,但发生的情况是我收到一条错误消息,说“下标需要数组或指针类型”。我对他们的意思有点困惑。它是在告诉我创建一个指向该索引的指针,然后在timeGen函数中调用该指针吗?一个解释会很棒!

非常感谢。此外,值mpg, speed, 取自我的代码的另一部分,它工作正常。关于如何解决我现在遇到的问题的说明,会很棒!

4

2 回答 2

0

您需要定义float car_speed而不是float speed。它将解决您的错误。

于 2013-02-28T08:14:52.933 回答
0

即使您有一个speed在定义之前命名的数组float speed,它也会在此定义之后立即超出范围。尝试这个:

float Cur_speed = speed[car];
timeGen(Cur_speed);

或者

timeGen(speed[car]); // without the float speed

另一件事是,在每次迭代中,您都在创建一个新的test. 看起来您真正想要的是拥有一个test数组:

int test[27][3];
for (int car = 0; car < 27; car++) {
 test[car][0] = car;
 test[car][1] = mpg[car];
 test[car][2] = speed[car];

确保这mpg是一个包含 27 个元素的数组,并且始终使用从 0 到 26 的索引。speed数组也是如此。当我们说 时test[car][0],我们指的是 的第一个元素test[car],由于您的定义,它总共有 3 个元素。本质上,这些行test[car][X] = Y;与您想要做的事情相同test[27][3] = {{car, mpg[car], speed[car]}},但是该语法仅在您第一次声明数组时才有效。并且您编写它的方式使用相同的数据初始化所有 27 个元素。

于 2013-02-28T06:24:04.820 回答