如何从 sys/time.h c++ 11 重置 getTimeString() 以便它在运行时启动?

问题描述 投票:0回答:1

我正在寻找一个示例,在构建并运行程序后重置时间字符串,以便每次都从 0 开始,以便能够看到哪些内容未同步。

c++ datetime c++11 time sys
1个回答
0
投票

您的 Menu 类(在调用构造函数之前)想要使用默认构造函数(不带参数)创建一个 Game 实例,但 Game 类没有默认构造函数(因为如果您创建任何构造函数,则不会自动创建默认构造函数)。

您有三个选择:

  1. 在 Game 类中当前构造函数旁边提供一个空构造函数,该构造函数获取字符串向量。
  2. 使
    Game m_game;
    成为
    Game m_game = Game(vector<string>());
    。这将在构造函数之前执行,这使您能够设置任何类成员的默认值。这个解决方案的缺点是,将调用复制构造函数(首先,将创建临时对象,然后将其复制到您的实例,它可以由编译器优化,但并非总是如此;如果您不知道它是什么,检查这个:https://www.geeksforgeeks.org/copy-constructor-in-cpp/
  3. 使用 C++ 中称为初始值设定项列表的东西。本主题中有一些关于堆栈溢出的问题,例如此处(C++ - 没有合适的默认构造函数可用)。在此解决方案中,您不会创建任何时间对象(如第一个解决方案中一样)。你的构造函数看起来像这样:
    Menu::Menu() : m_game(vector<string>()) {}

第一个和第三个选项是最好的。您必须决定使用哪一个。

当然,您可以将

vector<string>()
替换为非空向量。

您还应该查看这里:https://www.learncpp.com/cpp-tutorial/constructor-member-initializer-lists/。解释了有关初始化列表的所有内容。

这里的另一个问题是您不应该在 Menu 类中创建 Game 实例(这是一个架构错误)。例如,您可以传递对 choice() 方法或 Menu 类构造函数的指针或引用,并仅存储 Game 实例地址(如果 Game 实例将由多个方法使用,请使用后者)。更合适的方法是游戏包含一个菜单实例。

© www.soinside.com 2019 - 2024. All rights reserved.