题
我想将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的潜在冲突。
不隶属于 StackOverflow