2016-09-13 41 views
1

我attmepting在全球範圍內宣佈提升的ptime。但是我遇到了以下問題:申報升壓的ptime全球

主要功能之前,我宣佈:

static boost::posix_time::ptime start_time; 

然後在主函數中我初始化:

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

然後在主功能之外的功能,我試圖轉換爲一個字符串並打印,並得到「不是一個日期時間」;

無論是全局變量沒有被初始化或者是有範圍的問題嗎? 謝謝你的幫助。

+0

在不同的cpp文件的其他功能? – Hayt

回答

1

您可以在main函數中定義一個本地變量,該函數隱藏全局變量但與全局變量無關。

你不應該定義在main函數變量,只能分配給它:

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

非常感謝! –

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從未與實際日期初始化。

你要麼需要做初始化的全局空間,在主要做了一個任務,或者擺脫全局變量,在主聲明它,並參考其傳遞給需要它的功能。就個人而言,如果可能的話,我會選擇最後一個選項,因爲全局變量使代碼難以推理。