2013-02-28 93 views
0

我有一个循环来填充二维数组,并且我想将由这个总体创建的值传递给一个函数,以便用它进行其他计算。我是C++的初学者,所以清楚的解释会有很大的帮助。这里是我的代码:将2D数组索引传递给函数?

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,取自我的代码的其他部分工作正常。关于如何解决我现在遇到的问题的说明会很棒!

+2

无关,但严重的错误:数组是从零开始的。 – 2013-02-28 06:20:43

+0

如何定义'速度[汽车]'中的'速度'? – perreal 2013-02-28 06:20:53

+0

你应该为'float''速度'和速度数组使用不同的名称。实际上,“浮动速度”会隐藏阵列速度。 – Mankarse 2013-02-28 06:23:09

回答

0

即使您在定义float speed之前有一个名为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个元素。

+0

非常感谢您的回答!我有一个快速的问题,在第二部分,你说我正在生成另一个“测试”实例,我将如何继续for循环?我花了整整一个小时才弄清楚如何去做现在的事情,所以我对这个修改后的版本有点困惑。我确实明白它在做什么,但我不确定如何在已有的东西后继续它。 – Carpetfizz 2013-02-28 18:36:06

+0

这工作完美,谢谢!快速解释什么行:“测试[汽车] [0] =汽车;”手段会很好。另外,当我建立这个时,我得到这个堆栈错误:“运行时检查失败#2 - 变量'test'周围的堆栈已损坏。”这发生在我之前,我知道这意味着我对允许的内容有太多的初始化。 – Carpetfizz 2013-02-28 18:39:06

+0

修复了运行时检查的问题,但是我仍然会对“test [car] [0] = car”的解释有所了解;“作品。 – Carpetfizz 2013-02-28 18:54:40

0

您需要定义浮动car_speed而不是浮法速度。它会解决你的错误。