2015-08-11 6 views
3

У меня есть программа на C++, написанная в Microsoft Visual Studio (я только начал изучать). Вот мой код:Переменная, объявленная за пределами цикла, не определена внутри C++

else 
    // time is in seconds 
    int time = 0; 
    double speed = 0.0; 
    while (height >= 0) 
    { 
     cout << "At " << int time << " secs the ball is at height: " << height << " metres.\n"; 
     time++; 
     height -= distanceTravelled(speed); 
     speed += gravity; 
    } 

    // If height dropped from positive to negative in one second, the final fraction of a 
    // second before it hits the ground isn't displayed - so the if statement 
    if (height <= 0) 
     cout << "At " << time << " secs the ball is at height: " << height << " metres.\n"; 

Когда я пытаюсь построить его я получаю сообщение об ошибке

«время» является необъявленный идентификатор.

Но я объявил это вне цикла while. Так почему его нельзя найти?

+1

Is '<< int time <<' фактическая часть кода? Что он должен делать? – stefaanv

ответ

4

В коде, который вы отправили, есть две проблемы. Один из них является ложным int на выходной строке. Это должно быть только это:

cout << "At " << time << " secs the ball is at height: " << height << " metres.\n"; 

Вторая проблема заключается в том, что ваш else отсутствует брекеты. Это означает, что только объявление time находится внутри ветки else, а все остальное находится на том же уровне, что и условие (отступ не учитывается в C++). Таким образом, это должно выглядеть так:

else 
{ 
    // time is in seconds 
    int time = 0; 
    double speed = 0.0; 
    while (height >= 0) 
    { 
     cout << "At " << time << " secs the ball is at height: " << height << " metres.\n"; 
     time++; 
     height -= distanceTravelled(speed); 
     speed += gravity; 
    } 

    // If height dropped from positive to negative in one second, the final fraction of a 
    // second before it hits the ground isn't displayed - so the if statement 
    if (height <= 0) 
     cout << "At " << time << " secs the ball is at height: " << height << " metres.\n"; 
} 
+0

большое спасибо –

1

Проблема заключается в том вы объявляете новую переменную в вашем соиЬ заявлении:

соиЬ < < «В» < < INT время < < «секунд мяч находится на высоте:» < < высота < < "метров. \ n";

Просто удалите ИНТ

1

Это ваша проблема здесь:

else  //<==== missing paranthesis 
    // time is in seconds 
    int time = 0; 
    double speed = 0.0; 

Вы не хватает открытой paranthesis после другого. На самом деле происходит то, что первый оператор after else является ложной ветвью оператора if-else. Что происходит после этого, НЕ. Итак, весь код после строки с двойной скоростью = 0.0; находится вне инструкции if, которая не отображается в выдержке кода.

Что в действительности делает время Int быть в полном объеме другой, чем код доступа далее вниз это .. Вот почему код доступа к ИНТ время переменной, не может найти его.

Чтобы исправить: добавьте {после else и добавьте} далее вниз, чтобы охватить вашу логику.

0

В этой строке есть проблема.

cout << "At " << int time << " secs the ball is at height: " << height << " metres.\n"; 

int time должен быть заменен только time здесь.

Тип данных указывается с переменной только при ее определении, как в int time, или при его литье, как в (int)time. Вы просто печатаете переменную int.

Я не могу воспроизвести ту же самую ошибку, с которой вы сталкиваетесь с компилятором g ++, но изменение этого может решить.

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