2011-11-14 66 views
0

我有鏈接問題,我有兩個項目compliles到兩個dll(A.dll B.dll)。在項目A中,我有靜態的Singleton singleton。 Psudocode: 一個頭的項目一個鏈接項目,其中我使用其他項目的靜態成員

ClassA 
... 
... 
Singleton singleton; 
... 
... 

在B工程的一些地方在CPP文件我有:

... 
... 
ClassA::singleton.SomeMethod(); 
... 
... 

項目編譯,但有一個問題聯繫起來。

我在FreeCryEngine SDK 這個問題時,我嘗試在GameDLL項目調用CCryAction::GetCryAction()這一點。 這不起作用:

int a = CCryAction::GetCryAction()->IsInLevelLoad(); 

錯誤3錯誤LNK2001:解析外部符號:(?m_pThis @ CCryAction @@ 0PAV1 @ A) 「私有靜態 類CCryAction * CCryAction :: m_pThis」 ê :\ CryENGINE_v3_3_5_2456_FreeSDK \ Code \ Game \ GameDll \ GameStateRecorder.obj GameDll

這個方法怎麼看?

static CCryAction * GetCryAction() { return m_pThis; } 
+1

您已經告訴我們您有什麼錯誤,您現在如何鏈接,或只是詢問如何鏈接簡化但結構相似的解決方案。 – Jake

回答

0

您需要:在頭

struct ClassA { 
    static Singleton singleton; 
}; 

// or 
extern Singleton g_singleton; 

在CPP文件:

Singleton ClassA::singleton; 

// or 
Singleton g_singleton; 

所以,你可以在翻譯單元包括標題號召ClassA::singleton.someMethod()::g_singleton.someMethod()。一定要鏈接上面cpp的目標文件。

相關問題