2013-02-28 4 views
0

У меня есть цикл, который заполняет 2D-массив, и я хочу передать значения, созданные этой совокупностью, в функцию для выполнения других вычислений. Я новичок на 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 взяты из другой части моего кода, которая отлично работает. Инструкции о том, как исправить проблему, которую я имею сейчас, были бы замечательными!

+2

Несвязанная, но серьезная ошибка: массивы основаны на нуле. – 2013-02-28 06:20:43

+0

Как вы определяете 'скорость' в' speed [car] '? – perreal

+0

Вы должны использовать другое имя для 'float'' speed' и для массива скорости. Как бы то ни было, 'float speed 'изменяет скорость массива. – Mankarse

ответ

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 элементов с теми же данными.

+0

Большое спасибо за ответ! У меня есть быстрый вопрос, хотя, во второй части, где вы сказали, что я создаю еще один экземпляр «теста», как бы продолжить цикл for? Мне потребовалось целое, чтобы понять, как сделать то, что у меня есть сейчас, поэтому я немного запутался в этой модифицированной версии. Я действительно понимаю, что он делает, но я не совсем уверен, как продолжить его после того, что у вас уже есть. – Carpetfizz

+0

Это сработало отлично, спасибо! Быстрое объяснение того, что строка: «test [car] [0] = автомобиль;» значит, было бы здорово. Кроме того, я получаю эту ошибку стека, когда я ее создаю: «Ошибка проверки времени выполнения №2» - «Обход переменной« тест »был поврежден». Это случилось со мной раньше, и я узнал, что это означает, что у меня слишком много инициализаций для того, что разрешено. – Carpetfizz

+0

Исправлена ​​ошибка проверки времени, но я все равно был бы признателен за объяснение того, как «test [car] [0] = car;» работает. – Carpetfizz

0

Вам нужно определить поплавок car_speed, а не скорость поплавка. Он устранит вашу ошибку.

Смежные вопросы