2014-02-20 141 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

相关问题