未卫生化的局部变量
Uninitalized local variable
我收到一个错误,说:
错误c4700:单元化的本地变量"aCount"使用
(以及bCount
、cCount
、dCount
、fCount
(。这是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++;
这做了几件事:
- 读取
aCount
的值。该程序现在立即出现错误 - 增加该值
- 将递增的值存储在
aCount
中
即使这种情况从未发生过,您稍后在输出aCount
时也会再次读取它。这需要读取值,这又会使程序出错。所有的赌注都在这里,它可以为所欲为。
其他计数也是如此。你的编译器试图通过告诉你正在做一些危险的事情来帮助你。要修复它,请给变量一个初始值:
int aCount = 0;
//etc
†这可能有特定的例外情况
放入
int aCount = 0;
或
int aCount;
aCount = 0;
两者都会起作用!!
相关文章:
- 使用的未初始化局部变量'Quick'
- 修复未初始化的局部变量错误
- 局部变量保留函数中的值
- 如何使用 C++ 中的继承函数访问派生类中的局部变量
- 将引用分配给局部变量,如果局部变量超出范围,它会超出范围吗?
- Gnuplot_i.hpp C++接口绘制局部变量而不是文件
- 如何在函数外部访问函数中局部变量的值?
- 赋予全局变量而不是局部变量优先级的函数 - (异常行为)
- C++中静态方法的局部变量范围
- 未初始化的局部变量错误甚至认为我初始化了它(C++)
- 离开范围后如何保护局部变量的值?
- 局部变量名称冲突
- C++ lambda:如何'freeze'局部变量的值?
- 我应该使我的局部变量常量还是可移动的
- 获取具有静态局部变量的绑定/推断捕获 lambda 的函数指针
- 全局和局部变量初始化与 constexpr 的差异背后的基本原理
- 返回对局部变量 - C++ 的引用
- 是否可以影响 C++ 中回调函数的局部变量?
- 警告 C4101 未引用的局部变量
- 线程局部变量的初始化顺序