在循环外声明的变量在C ++中是未识别的

时间:2015-08-11 13:52:42

标签: c++ identifier

我在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";

当我尝试构建它时,我收到错误

  

&#34;时间&#34;是未声明的标识符。

但是我已经在while循环之外声明了它。那为什么不能找到呢?

4 个答案:

答案 0 :(得分: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";
}

答案 1 :(得分:1)

问题是你在cout语句中声明了一个新变量:

cout&lt;&lt; “At”&lt;&lt; int 时间&lt;&lt; “球在高处:”&lt;&lt;高度&lt;&lt; “米。\ n”;

只需删除 int

即可

答案 2 :(得分:1)

这是你的问题:

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

在其他情况下你没有开放的副词。实际发生的是,else之后的第一个语句是if-else语句的假分支。之后发生的事情不是。因此, double speed = 0.0; 行之后的所有代码都在if语句之外,这在代码摘录中是不可见的。

这实际上使 int time 处于一个完整的其他范围,而不是进一步访问此代码的代码。这就是代码访问 int time 变量,找不到它。

要修复:添加{after else并再添加}以包含您的逻辑。

答案 3 :(得分:0)

这一行存在问题。

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

int time应仅由time替换。

数据类型仅在定义时使用变量指定,如int time中所示,或者在投射数据类型时,如(int)time中所示。您只是打印int变量。

我无法重现您使用g ++编译器所面临的完全相同的错误,但更改上述内容可能会解决此问题。