2012-03-25 129 views
0

我實現了用於記錄的Singleton類。我聲明瞭logging_instance_的靜態類別名稱support_service::logging_service上只創建一個實例。 support_service::logging_service類的 Service_logging呼叫實例,其declear靜態變量::logging_instance_但顯示錯誤對Singleton類的靜態成員函數的未定義引用

undefined reference to `support_service::logging_service<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int>::logging_service()' collect2: ld returned 1 exit status

support_service.hpp

namespace support_service 
{     
template<typename PATH = std::string , typename LEVEL = int> 

    class logging_service 
{ 

    public: 

    static boost::shared_ptr<logging_service<PATH,LEVEL> > instance(); 
    .... 
    private: 

    logging_service(); 
    logging_service(const logging_service<PATH,LEVEL>&);                                  
    static boost::shared_ptr<logging_service<PATH,LEVEL> > logging_instance_;                             
};  
} 

template<typename PATH, typename LEVEL>                                       
    boost::shared_ptr<logging_service<PATH,LEVEL> > logging_service<PATH,LEVEL>::instance()                          
    {                                               
     if(logging_instance_.get() == NULL)                                      
      logging_instance_ = boost::shared_ptr<logging_service<PATH,LEVEL> >(new logging_service<PATH,LEVEL>``());                    
     return logging_instance_;                                         
    } 

service_logging.hpp

using  namespace support_service;    

template<typename PATH, typename LEVEL>                                      
boost::shared_ptr<logging_service<PATH,LEVEL> >support_service::logging_service<PATH,LEVEL>::logging_instance_; 


namespace service_logging 
{ 

    template<typename PATH = std::string, typename LEVEL = int> 
    class service_logging 
    { 
     public: 
     service_logging(); 
     bool set_logging(PATH file_path); 
    }; 
} 



template<typename PATH, typename LEVEL> 
bool service_logging<PATH,LEVEL>::set_logging(PATH file_path)                                 
{ 
boost::shared_ptr<logging_service<PATH,LEVEL> > logging_ = logging_service<PATH,LEVEL>::instance();                      
...                                             
} 
+0

你不能正確格式化你的代碼嗎?你不知道它有多嚴重嗎? – Nawaz 2012-03-25 07:32:08

+2

另外,使用單身人士 - >不要同情。 – Puppy 2012-03-25 07:34:08

回答

1

我注意到的一件事是,您沒有一個用於logging_service或service_logging構造函數的主體,是否可以從發佈的代碼中排除?

這就是我能從代碼中發現的不幸的,如果有一些部分缺失,請添加它們以便我可以進一步瞭解。

+0

你的意思是ctor在''support_service :: logging_service''中,對嗎? – 2012-03-25 10:57:20

+0

抱歉,這是我的意思。 – josephthomas 2012-03-25 17:29:13

0

聲明在頭文件support_service.hpp的構造函數support_service::logging_service<PATH,LEVEL>::logging_service(第14行),甚至在同一個頭文件(24行)稱其爲不明PATHLEVEL。然而,你沒有提供一個定義,所以當然你會得到一個未定義的引用錯誤,你還有什麼別的?

解決方案:爲您的班級定義ctor。確保定義或者從頭文件support_service.hpp中可見,或者對於所有可能的PATH - LEVEL組合實例化。

相關問題