我收到的错误是:
错误c4700:使用了单元化的局部变量'aCount'
(以及bCount
,cCount
,dCount
,fCount
)。这是C++ How to Program: Late Objects Version (7th Edition) by Deitel and Deitel我逐字复制的一个例子,不明白为什么它不起作用)请帮忙。谢谢。
编辑:谢谢大家的回复!
#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 << "\n\nNumber of students who received each letter grade:"
<< "\nA: " << aCount
<< "\nB: " << bCount
<< "\nC: " << cCount
<< "\nD: " << dCount
<< "\nF: " << fCount
<< endl;
}
答案 0 :(得分:4)
int aCount;
这可以将aCount
声明为整数,您可能知道。但是,由于变量具有自动存储持续时间(与大多数非全局和非静态变量一样),因此它具有的值是未知的,并且假定它具有任何有意义值的程序是错误的。实际上,使用该值可能会导致代码中不相关的部分停止工作†。这总结为undefined behaviour。
现在下次你对这个变量做任何事情都在交换机中:
aCount++;
这做了一些事情:
aCount
的值。该计划现在立即出现问题。aCount
中。 即使这种情况从未发生过,您也会在输出后再次从aCount
读取。这需要读取值,这再次使程序错误。所有的赌注都在这里,它可以做任何想做的事。
其他计数也是如此。你的编译器试图通过告诉你你正在做一些危险的事情来帮助你。要修复它,请为变量赋予初始值:
int aCount = 0;
//etc
†这可以有specific exceptions。
答案 1 :(得分:1)
放
int aCount = 0;
或
int aCount;
aCount = 0;
两者都有效!!