2015-12-07 42 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