2014-02-20 140 views
0

我正在用gcc 4.8.2編譯cygwin,編譯完成時沒有錯誤。但聯繫的時候,我收到以下消息:C++調用派生類中基類的模板方法

bin/libUsersMgmnt.a(CUsersMgmnt.cpp.o): In function nsUserMgmnt::CUsersMgmnt::CUsersMgmnt()': /home/HCAST2/v1.05-dev/UsersMgmnt/CUsersMgmnt.cpp:23: undefined reference to int nsMsgHandler::CMsgHandler::createLocationUserMap()' /home/HCAST2/v1.05-dev/UsersMgmnt/CUsersMgmnt.cpp:23:(.text+0x19f): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `int nsMsgHandler::CMsgHandler::createLocationUserMap()' collect2: error: ld returned 1 exit status

我有這個基類:

Header File CMsgHandler.h 

namespace nsMsgHandler 
{ 
    class CMsgHandler 
    { 
    protected: 
     template<class enhFlags> createLocationUserMap(); 
    }; 
} 

代碼文件CMsgHandler.cpp

... some code 
using namespace nsMsgHandler; 
... some code 
template <class enhFlags> 
int CMsgHandler::createLocationUserMap() 
{ 
..... 
} 

這是派生類: 頭文件CUsersMgmnt.h

namespace nsUserMgmnt 
{ 
    class CUsersMgmnt : public CMsgHandler 
    { 
    public: 
     CUsersMgmnt(); 
    }; 
} 

代碼文件CUsersMgmnt.cpp

... some code 
using namespace nsUserMgmnt; 
... some code 
CUsersMgmnt::CUsersMgmnt() 
{ 
    this->createLocationUserMap<nsUserMgmnt::types::Class1>(); 
} 

我敢肯定,有在代碼中的錯誤。我試圖解決這個問題幾個小時。

回答

2

你應該將你的:

template <class enhFlags> 
int CMsgHandler::createLocationUserMap() 
{ 
..... 
} 

到CMsgHandler.h

否則編譯器不能夠實例化模板CUsersMgmnt.cpp

+0

非常感謝,這個工作完美,再次感謝 – Trungus

相關問題