我很想在全球范围内宣布提升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”;
全局变量是否未初始化或存在范围问题? 谢谢你的帮助。
答案 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中声明它,并通过引用将其传递给需要它的函数。就个人而言,如果可能的话,我会选择最后一个选项,因为全局变量使得代码更难以推理。