2012-01-26 52 views
-2

全球類的構造函數,我有以下項目生成foo.lib。C++的庫文件

//foo.h: 
class A 
{ 
public: 
    A(); 
    static A* i; 
}; 

//foo.cpp: 
A* i = 0; 
A g_A_instance; 
A::A() 
{ 
    //this constructor is not called :(
    i = this; 
} 

我有另一個項目生成與foo.lib鏈接的exe文件。看來構造函數A :: A()沒有被調用。我如何做這項工作,是否有一些我錯過的編譯器選項?

PS:我使用的Visual Studio 2008年編譯

感謝, Raxvan。

+0

你是什麼意思,它不叫?你有錯誤嗎?你有什麼代碼在exe中實例化它? – StevieG

+0

我有一個斷點,在構造一個printf和他們都不是working.Also當代碼運行靜態變量i爲NULL所有我發現這個問題的方式 – Raxvan

回答

0

如果我改變

A* i = 0; 

A* A::i = 0; 

所以它會連接,構造被稱爲正常,我在VS2005,默認選項。這個確切的例子是否在你的編譯器上重現了這個問題?

+0

,因爲A是不是在主項目中使用,編譯器「刪除」任何A相關數據,如果我使用A(即使是簡單的指針),那麼一切正常。 – Raxvan