全局声明 Boost ptime

Declare Boost ptime globally

我正在尝试在全球范围内声明提升 ptime。但是我遇到了以下问题:

在main函数之前声明:

static boost::posix_time::ptime start_time;

然后我在主函数里面初始化:

boost::posix_time::ptime start_time(boost::posix_time::microsec_clock::universal_time());

然后在主函数外的函数中,我尝试转换为字符串并打印,我得到 "not-a-date-time";

全局变量没有被初始化或者范围有问题? 感谢您的帮助。

你在main函数里面定义了一个local变量,一个隐藏全局变量但与全局变量无关的变量。

你不应该在 main 函数中定义变量,只分配给它:

start_time = boost::posix_time::microsec_clock::universal_time();
boost::posix_time::ptime start_time(boost::posix_time::microsec_clock::universal_time());

不会从全局范围初始化 start_time。这将创建一个名为 start_time 的新变量,其作用域为 main 并隐藏全局变量 start_time。当您尝试在另一个函数中使用全局 start_time 时,您会收到 not-a-date-time 错误,因为 start_times 从未使用实际日期进行初始化。

您要么需要在全局中进行初始化space,在main中进行赋值,要么摆脱全局变量,在main中声明它,并通过引用传递给需要的函数它。如果可能的话,我个人会选择最后一个选项,因为全局变量使代码更难推理。