2010-02-02 98 views
0

GPH是一個單獨的類沒有getInstance方法靜態成員訪問鏈接的問題

class gph 
{ 
public: 

    static void newfun(); 
    static void newfun1(); 

    //...// 

private: 
    gph(); 

}; 

該類被建設成一個靜態庫

現在我有一個DLL從那裏我需要訪問靜態函數。所以,A級是一個DLL

我有一個C++成員函數的一部分說

void A:: fun() 
{ 

    gph::newfun() ; //accessing a static function : gives linker errors 
} 

在另一方面,如果我取笑()靜態它不給我任何鏈接錯誤。但我不想取笑()靜態

+1

如果你得到鏈接錯誤,則是最有可能出現在聲明和定義(的.cpp/.h)中的成員函數的簽名不同。 – 2010-02-02 13:54:50

+4

您能告訴我們錯誤是什麼 – Yacoby 2010-02-02 13:55:45

+5

您需要向我們展示更多代碼 - 例如,gph的定義及其與A的關係。 – 2010-02-02 13:59:02

回答

0

大部分是我與靜態鏈接庫的交易工作,所以這個答案可能並不適用,但可能的線索你的問題。因此,基於這一點以及我現在看到的內容,我的第一個想法是檢查您正在構建的dll中是否包含靜態庫。

一個懸而未決的符號通常意味着,無論是簽名不匹配,或者你沒有包括必要的庫。它從不同的編譯器編譯器,但最讓你指定庫目錄(有時-L在命令行表示)和被鏈接的實際庫(有時-l表示)。

因爲我不使用DLL的那麼多,我對他們的理解是類似於建立一個可執行文件。如果在構建時使用動態鏈接,則鏈接到的庫的路徑將嵌入到可執行文件中,因此可執行文件的大小較小,但依賴於鏈接的庫路徑而不移動。

所以,當你建立你的DLL時,確保你編譯了gph類的cpp併爲它創建了一個靜態庫。然後,當你在A類中使用它時,你需要在庫中包含標題和鏈接。

0

我覺得是調用約定問題。

請嘗試以下代碼:

class gph 
{ 
public: 

    static void __cdecl newfun(); 
    //...// 

};