struct PlayerInfo {
string Name;
int InfoNumber;
string CurrentGuess;
int HistoryGuess;
double Time;
};
int main()
{
struct PlayerInfo player1;
struct PlayerInfo player2;
struct PlayerInfo player3;
struct PlayerInfo player4;
struct PlayerInfo player5;
它一直警告我InfoNumber,HistoryGuess和Time尚未初始化,我在做什么错了?
答案 0 :(得分:1)
您的警告完全来自其主张。您的琐碎成员没有特别初始化。
您的声明player
使用的是PlayerInfo
类实例的 default-construction 。由于您没有为该类类型提供default-ctor,因此将使用编译器生成的默认版本,它将按在类中声明的顺序默认构造任何成员变量。
std::string
提供了适当的默认值,因此可以处理您的标准字符串成员。但是普通成员(两个int
和一个double
)成员则没有。编译器为这些操作生成了默认构造函数。什么都没有。它将它们保留为未初始化状态。
几种解决方法:
提供适当的默认值
以下是该类的简单默认值。它指定了用我们想要的值初始化的成员。注意,我省略了字符串成员,因为使用编译器生成的default-ctor调用已经为我们处理了它们。
struct PlayerInfo {
std::string Name;
int InfoNumber;
std::string CurrentGuess;
int HistoryGuess;
double Time;
PlayerInfo()
: InfoNumber(0)
, HistoryGuess(0)
, Time(0.0)
{
}
};
使用值初始化
您可以使用大括号语法值初始化:
int main()
{
PlayerInfo player1{};
PlayerInfo player2{};
PlayerInfo player3{};
PlayerInfo player4{};
PlayerInfo player5{};
}
这些只是其中两个选项。还有其他一些,但是这些可能是最容易理解的,尤其是第一个。