我的代碼非常大,但我會盡可能地儘量減少它。爲什麼全局定義的靜態變量被重置?
基本上我想定義一個字符串,只修改一個地方(我的主),然後在我的整個程序中讀取。
我的defines.h包含在任何地方,所以在那裏我定義。
static std::string MAINLOG = "RANDOMNES";
在我的主要功能我做的:
for (int i = 0; i < files.size(); i++){
// Do stuff
prepDbugDir(); // This sets MAINLOG to "CORRECT_VALUE"
std::cout << "Before " << MAINLOG << std::endl;
// Call a class function whose includes include my defines.h
std::cout << "After " << MAINLOG << std::endl;
}
和打印出我的文件是
Before CORRECT_VALUE
RANDOMNESS
After CORRECT_VALUE
所以我的問題是爲什麼,我怎樣才能獲得值爲保持在我的課堂內。
您是否將您的程序信息分成幾個* .a或* .o?看起來由於您將編程分割爲多個目標文件,因此存在多個MAINLOG副本。 –
編譯時,是的。如果這是問題,有沒有辦法解決這個問題? – aarelovich
嘗試將MAINLOG的聲明放入標題中,並且只在包含標題(可能爲defines.cpp)的單個.cpp文件中定義一次。 – Baldrick