2015-12-07 65 views
0

我有一個單例類。多文件訪問單例類

在A.H

class single 
{ 
    public: 
     static single *Instance; 
     static single* getInstance() 
     { if(!Instance) Instance = new single; 
      return Instance; 
     } 
     void hello() { cout<<"Hello"; } 
    private: single(){ } 
} 

在A.cpp

single *single::Instance = 0; 
std::auto_ptr <single> SINGLE_OBJ (single::getInstance()); 

在B.cpp

#include "A.h" 

SINGLE_OBJ->hello(); 

我得到以下錯誤: SINGLE_OBJ沒有在這個範圍內聲明。

+1

你爲什麼不使用單一::的getInstance() - >你好();在B.cpp中? – Rabbid76

+0

爲什麼通過'auto_ptr'在外部管理實例的內存?它使用'new'分配的事實是一個實現細節。它應該保持在'single'的內部用於封裝,並且確保即使用戶不將指針放在auto_ptr中也可以清除內存。順便說一下,C++ 11用'std :: unique_ptr'替換了不推薦使用的'std :: auto_ptr'類模板。 – TheOperator

回答

1

要在B.cpp中顯示SINGLE_OBJ,你應該在A.h.中聲明它。即:

extern std::auto_ptr <single> SINGLE_OBJ; 

也,你爲什麼使用std::auto_ptr,其棄用 - 你應該切換到std::unique_ptr

+0

當我編譯代碼併成功創建「.o」和「.so」時,工作正常。但是,當另一個應用程序試圖使用這個「.o」或「.so」時,我得到一個錯誤,說明對SINGLE_OBJ – user2524261

+0

@ user2524261的未定義引用,你可能想要開始一個新問題,你沒有提到你想在共享中使用它圖書館。對我來說,這聽起來像編譯中的一些錯誤的命令即。看看這裏:http://stackoverflow.com/questions/12748837/c-shared-library-undefined-reference-to-fooclasssayhello – marcinj