我想将TM结构用作类中的静态变量。花了一整天的阅读和尝试,但仍然无法正常工作:(如果有人可以指出我做错了什么,这将很感激

在我的班级中,我宣布它为:

static struct tm *dataTime;

在main.cpp中,我试图用系统时间临时定义和初始化它以测试(在运行时输入的实际时间)

time_t rawTime;
time ( &rawTime );
tm Indice::dataTime = localtime(&rawTime);

但是似乎我无法使用time()外部功能。

main.cpp:28:错误:预期的构造函数,驱动器或键入转换之前”('token

如何在类的静态TM中初始化值?

有帮助吗?

解决方案

您可以将上述内容包裹在函数中:

tm initTm() {
    time_t rawTime;
    ::time(&rawTime);
    return *::localtime(&rawTime);
}

tm Indice::dataTime = initTm();

为避免可能的链接问题,请使函数静态或将其放在未命名的名称空间中。

其他提示

struct tm get_current_localtime() {
    time_t now = time(0);
    return *localtime(&now);
}

struct tm Indice::dataTime = get_current_localtime();

将整个内容包裹在功能中,并用它来初始化静态成员:

tm gettime() {
    time_t rawTime;
    time ( &rawTime );
    return localtime(&rawTime);
}

tm Indice::dataTime = gettime();

而且您不需要(因此不应该)与前缀结构使用 struct 在C ++中: tm 足够了,不 struct tm 需要。

您无法任意调用函数外部功能。要么在您的初始化 main() 功能,或围绕 tm 构造与进行初始化的构造函数。

另请注意,您的 struct tm 是指向TM结构的指针。 Localtime的返回是单身指针,当您或其他任何人再次致电Localtime时,其内容将更改。

添加此:

namespace {
  class Initializer {
    public:
      Initializer() { 
        time_t rawtime; time(&rawtime);
        YourClass::dataTime = localtime(&rawtime);
      }
  };
  static Initializer myinit();
}

当对象文件在运行时初始化对象文件时,调用构造函数initializer(),然后根据需要设置“全局”变量Datatime。请注意,匿名名称空间构造有助于防止名称初始化器和Myinit的潜在冲突。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top