Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;在派生类中调用基类的模板方法_C++_Templates_Cygwin_Derived Class - Fatal编程技术网

C++ C++;在派生类中调用基类的模板方法

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

我使用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()' /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()
{
.....
}