未卫生化的局部变量

Uninitalized local variable

本文关键字:局部变量 生化      更新时间:2023-10-16

我收到一个错误,说:

错误c4700:单元化的本地变量"aCount"使用

(以及bCountcCountdCountfCount(。这是Deitel和Deitel的C++How to Program:Late Objects Version(7th Edition(中的一个例子,我逐字逐句地复制了它,不明白为什么不起作用(请帮忙。非常感谢。

编辑:谢谢大家的回复!

#include <iostream>
using namespace std;
int main()
{
    int grade;
    int aCount;
    int bCount;
    int cCount;
    int dCount;
    int fCount;
    cout << "Enter the letter grades." << endl
    << "Enter the EOF character to end input." << endl;

    while ((grade = cin.get()) != EOF)
    {
        switch (grade)
        {
        case 'A':
        case 'a':
            aCount++;
            break;
        case 'B':
        case 'b':
            bCount++;
            break;
        case 'C':
        case 'c':
            cCount++;
            break;
        case 'D':
        case 'd':
            dCount++;
            break;
        case 'F':
        case 'f':
            fCount++;
            break;
        case 'n': 
        case 't':
        case ' ':
            break;
        default: 
            cout << "Incorrect letter grade entered."
                << "Enter a new grade." << endl;
            break;
        }
    }
    cout << "nnNumber of students who received each letter grade:"
        << "nA: " << aCount
        << "nB: " << bCount
        << "nC: " << cCount
        << "nD: " << dCount
        << "nF: " << fCount
        << endl;
}
int aCount;

这声明aCount是一个整数,正如您可能知道的那样。然而,由于变量具有自动存储持续时间(像大多数非全局和非静态变量一样(,它的值是未知的,并且假设它具有任何有意义的值的程序是有缺陷的。事实上,使用该值可能会导致代码中不相关的部分停止工作。这一切都可以很好地总结为未定义的行为

现在,下一次使用这个变量做任何事情时,都是在开关中:

aCount++;

这做了几件事:

  1. 读取aCount的值。该程序现在立即出现错误
  2. 增加该值
  3. 将递增的值存储在aCount

即使这种情况从未发生过,您稍后在输出aCount时也会再次读取它。这需要读取值,这又会使程序出错。所有的赌注都在这里,它可以为所欲为。

其他计数也是如此。你的编译器试图通过告诉你正在做一些危险的事情来帮助你。要修复它,请给变量一个初始值:

int aCount = 0;
//etc

†这可能有特定的例外情况

放入

int aCount = 0;

int aCount; 
aCount = 0;

两者都会起作用!!