我剛遇到一個奇怪的問題。在WinMain.cpp,以後我有一個用戶創建的頭文件,但在此之前的WinMain,我宣佈一個全局實例我的類腦的,就像這樣:在const聲明之後構造全局對象之前是如何構造的?
(windows includes)
#include "BrainLib.h"
#include "Brain.h"
Brain brain;
(wndproc declaration)
WinMain() {
(some code using Brain)
}
在BrainLib.h
,我宣佈爲普通程序中使用的一些常量,如const unsigned short SERVER_PORT = 12345;
和const std::string SERVER_IP_STRING = "192.168.1.104";
請注意,Brain.h
還包括BrainLib.h
現在,它變得有趣。 Brain包含一個只能連接到一臺服務器的Winsock客戶端包裝類。因此,Winsock客戶端具有一個構造函數,它需要一個端口/ IP並且沒有默認的構造函數。因此,它必須在大腦構造函數初始化列表初始化像這樣:
Brain::Brain() : winsockClient(SERVER_PORT, SERVER_IP_STRING)
{
}
然而,SERVER_IP_STRING仍然未初始化的時候,大腦的構造函數被調用!我在WinMain中添加了一個支票,並且在那個時候構建了它,但似乎首先調用了Brain構造函數,儘管它出現在第二位。這怎麼/爲什麼會這樣?
另外,只是爲了讓這個陌生人:我複製了源代碼並在不同的機器上編譯,並且它按預期工作。每個版本都運行同一版本的MSVS 2008,不過我想可能是用某種不同的版本設置。
您是否在非工作編譯器版本中將'SERVER_IP_STRING'聲明爲'const string'? – iammilind 2011-04-19 01:58:20
對不起,對,兩個服務器變量都聲明爲const!不能相信我把它留下了。編輯。 – rotanimod 2011-04-19 02:02:01
而工作版本具有完全相同的源代碼。 – rotanimod 2011-04-19 02:03:13