全局声明增强ptime

时间:2016-09-13 13:04:34

标签: c++ boost posix

我很想在全球范围内宣布提升ptime。但是我遇到了以下问题:

在主要功能之前我声明:

static boost::posix_time::ptime start_time;

然后在main函数内初始化:

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

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

全局变量是否未初始化或存在范围问题? 谢谢你的帮助。

2 个答案:

答案 0 :(得分:1)

main函数中定义一个 local 变量,该变量隐藏全局变量但与全局变量无关。

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

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

答案 1 :(得分:1)

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从未使用实际日期进行初始化。

您需要在全局空间中进行初始化,在main中执行赋值,或者去除全局变量,在main中声明它,并通过引用将其传递给需要它的函数。就个人而言,如果可能的话,我会选择最后一个选项,因为全局变量使得代码更难以推理。