2013-02-28 94 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而不是浮法速度。它會解決你的錯誤。