即使在声明时也使用未初始化的局部变量

时间:2014-04-30 00:57:46

标签: c++ variable-declaration

所以问题是我试图在for循环中使用变量speed。我给出的错误是:使用了未初始化的局部变量'speed'。奇怪的是,我之前已经将速度声称为int。

我要包含头文件以及与此项目相关的其他2个文件。由于涉及多个文件,我使用了所有这些文件的链接到pastebin,但UseCar.cpp代码也会在这里。

Car.h http://pastebin.com/xn8dnzrH

Car.cpp http://pastebin.com/QYrXDMfe

UseCar.cpp http://pastebin.com/GX8j2vPU

#include "stdafx.h"
#include "Car.h"
#include "Car.cpp"
#include <stdio.h>
#include <string>
#include <iostream>

using namespace std;

int main(){

    Car dealer;// Creates a new Car object
    int yearModel;// Local variables for model year
    int speed;// Local variables for speed
    string make;// Names are kept the same to avoid confusion

    // Calls the accelerate function 5 times and displays the results after each iteration
    for (int i = 0; i < 5; ++i){
        dealer.accelerate(speed);
        cout << "The current speed is: " << dealer.getSpeed() << endl;

    }

    cout << "We are now braking the car" << endl;

    // Calls the brake function 5 times and displays the results after each iteration
    for (int i = 0; i < 5; ++i){
        dealer.brake(speed);
        cout << "The current speed is: " << dealer.getSpeed() << endl;
    }
}

2 个答案:

答案 0 :(得分:1)

您定义了speed,但您没有给它一个初始值。 &#34;自动&#34;变量,基本上是堆栈上的变量,不会被初始化为任何东西。静态存储持续时间&#34;零初始化。静态存储持续时间包括&#34;命名空间范围&#34; (包括全局变量),静态局部变量和静态数据成员。

答案 1 :(得分:1)

这里有很多问题。首先,您要定义一个要公开的类,即在其他源文件中可用,但是您要在cpp源文件而不是标题中定义它。如果您必须#include cpp个文件,那么您做错了。如果只有该文件的内容需要知道它们是什么(这在cpp设计中很常见),那么在PIMPL文件中定义类是很好的,但这不是这里的情况。将您的班级定义放在Car.h中,一般来说从不#include cpp文件

现在,这并没有回答关于speed.的初始问题。一直遵循的一个简单规则是始终初始化所有变量无论是本地变量还是全局变量还是成员变量。这样可以避免在c ++中遇到很多错误。