变量“ PlayerInfo :: HistoryGuess”未初始化。始终初始化成员变量(类型6)错误始终显示

时间:2019-12-29 13:16:46

标签: c++

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尚未初始化,我在做什么错了?

1 个答案:

答案 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{};
}

这些只是其中两个选项。还有其他一些,但是这些可能是最容易理解的,尤其是第一个。