C++ C++;在派生类中调用基类的模板方法
我使用GCC4.8.2在cygwin中编译,编译完成时没有错误。但当链接时,我收到以下消息: bin/libUsersMgmnt.a(CUsersMgmnt.cpp.o):函数中C++ C++;在派生类中调用基类的模板方法,c++,templates,cygwin,derived-class,C++,Templates,Cygwin,Derived Class,我使用GCC4.8.2在cygwin中编译,编译完成时没有错误。但当链接时,我收到以下消息: bin/libUsersMgmnt.a(CUsersMgmnt.cpp.o):函数中 nsUserMgmnt::CUsersMgmnt::CUsersMgmnt()': /home/HCAST2/v1.05-dev/UsersMgmnt/CUsersMgmnt.cpp:23:未定义 参考int nsMsgHandler::CMsgHandler::createLocationUserMap()' /ho
nsUserMgmnt::CUsersMgmnt::CUsersMgmnt()':
/home/HCAST2/v1.05-dev/UsersMgmnt/CUsersMgmnt.cpp:23:未定义
参考
int
nsMsgHandler::CMsgHandler::createLocationUserMap()'
/home/HCAST2/v1.05-dev/UsersMgmnt/CUsersMgmnt.cpp:23:(.text+0x19f):
根据未定义的符号重新定位截断以适应:R_X86_64_PC32
`int
nsMsgHandler::CMsgHandler::createLocationUserMap()'
collect2:错误:ld返回了1个退出状态
我有一个基本类:
Header File CMsgHandler.h
namespace nsMsgHandler
{
class CMsgHandler
{
protected:
template<class enhFlags> createLocationUserMap();
};
}
代码文件CUsersMgmnt.cpp
... some code
using namespace nsUserMgmnt;
... some code
CUsersMgmnt::CUsersMgmnt()
{
this->createLocationUserMap<nsUserMgmnt::types::Class1>();
}
。。。一些代码
使用名称空间nsUserMgmnt;
... 一些代码
CUsersMgmnt::CUsersMgmnt()
{
此->createLocationUserMap();
}
我很确定代码中有错误。我花了几个小时试图解决这个问题 您应该移动您的:
template <class enhFlags>
int CMsgHandler::createLocationUserMap()
{
.....
}
模板
int CMsgHandler::createLocationUserMap()
{
.....
}
到CMsgHandler.h
否则,编译器无法在CUsersMgmnt.cpp中实例化模板
... some code
using namespace nsUserMgmnt;
... some code
CUsersMgmnt::CUsersMgmnt()
{
this->createLocationUserMap<nsUserMgmnt::types::Class1>();
}
template <class enhFlags>
int CMsgHandler::createLocationUserMap()
{
.....
}