我正在寻找一个示例,在构建并运行程序后重置时间字符串,以便每次都从 0 开始,以便能够看到哪些内容未同步。
您的 Menu 类(在调用构造函数之前)想要使用默认构造函数(不带参数)创建一个 Game 实例,但 Game 类没有默认构造函数(因为如果您创建任何构造函数,则不会自动创建默认构造函数)。
您有三个选择:
Game m_game;
成为 Game m_game = Game(vector<string>());
。这将在构造函数之前执行,这使您能够设置任何类成员的默认值。这个解决方案的缺点是,将调用复制构造函数(首先,将创建临时对象,然后将其复制到您的实例,它可以由编译器优化,但并非总是如此;如果您不知道它是什么,检查这个:https://www.geeksforgeeks.org/copy-constructor-in-cpp/)Menu::Menu() : m_game(vector<string>()) {}
。第一个和第三个选项是最好的。您必须决定使用哪一个。
当然,您可以将
vector<string>()
替换为非空向量。
您还应该查看这里:https://www.learncpp.com/cpp-tutorial/constructor-member-initializer-lists/。解释了有关初始化列表的所有内容。
这里的另一个问题是您不应该在 Menu 类中创建 Game 实例(这是一个架构错误)。例如,您可以传递对 choice() 方法或 Menu 类构造函数的指针或引用,并仅存储 Game 实例地址(如果 Game 实例将由多个方法使用,请使用后者)。更合适的方法是游戏包含一个菜单实例。