Bellow是一个简单的程序,用于检查某个文本文件,以查看其中是否存在单词(在本例中为名称)。
我一直在弹出一个声明“正在使用变量'NamePresent'而没有被初始化。”是不是将NamePresent初始化为bool?
#include <fstream>
#include <iostream>
#include <string>
int main()
{
std::ifstream NameFile("Names.txt");
std::string Name;
bool NamePresent;
std::cin >> Name;
while(NameFile >> Name)
{
if(NamePresent == true)
{
std::cout << "This works!" << std::endl;
}
if(NamePresent == false)
{
std::cout << "Nope!" << std::endl;
}
}
return 0;
}
答案 0 :(得分:3)
不,它被宣布为布尔。您仍然需要为其指定值true或false:
bool NamePresent = false;
答案 1 :(得分:2)
“已初始化”表示使用值初始化。
bool NamePresent = false;
在上面的代码中,声明为bool
,但未初始化。此外,您的代码中没有其他语句为NamePresent
分配值(但可能您正在努力)。
答案 2 :(得分:2)
如果程序试图使用未初始化的变量( 未初始化) ,任何体面的编译器都会向我们发出警告。
test.cpp:在函数'int main()'中:test.cpp:15:9:警告: 'NamePresent'可以在此函数中未初始化使用 [-Wmaybe-未初始化] if(NamePresent == true) ^
您应该仔细注意编译器消息。
答案 3 :(得分:2)
变量的生命中有4个重要时刻:
在此步骤中,您将通知编译器有关变量类型的信息。这是必需的,以便编译器知道如何解释内存中的数据,例如。
这是&#34;诞生&#34;变量。如果在声明中指定了其名称和类型,则在此指示编译器为其分配内存。请注意,int a;
之类的语句既是声明又是定义,因为它引入了新名称(a)并为int变量分配内存。
定义变量时,会为其保留一些内存。变量的初始值是该内存的内容,可以是任何内容(通常称为垃圾)。因此,您需要为变量分配第一个有用的值。当然,您可以在不将其初始化为值的情况下使用它,但此 容易出错,因为您无法依赖该变量的值。编译器知道这一点并给你一个警告。请注意,如果在循环或条件分支中初始化变量,则会收到警告,因为条件可能不为真或循环可能未执行。
虽然这一点对你的问题没有实际用处,但值得记住。变量在超出范围时(通常在已定义的指令块结束时,如果它是局部变量,并且当程序结束时,如果它是全局变量),则消失。 / p>