[英]C++ calling a template method of a base clase in a derived class
I'm compiling in cygwin with gcc 4.8.2, and the compilation finishes without an error. 我正在用gcc 4.8.2编译cygwin,编译完成没有错误。 But when linked, I receive the following message:
但链接后,我收到以下消息:
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 statusbin / libUsersMgmnt.a(CUsersMgmnt.cpp.o):在函数
nsUserMgmnt::CUsersMgmnt::CUsersMgmnt()': /home/HCAST2/v1.05-dev/UsersMgmnt/CUsersMgmnt.cpp:23: undefined reference to
/ home / HCAST2 / v1.05-dev /UsersMgmntnsUserMgmnt::CUsersMgmnt::CUsersMgmnt()': /home/HCAST2/v1.05-dev/UsersMgmnt/CUsersMgmnt.cpp:23: undefined reference to
int nsMsgHandler的nsUserMgmnt::CUsersMgmnt::CUsersMgmnt()': /home/HCAST2/v1.05-dev/UsersMgmnt/CUsersMgmnt.cpp:23: undefined reference to
:: CMsgHandler :: createLocationUserMap()'/ home / HCAST2 / v1.05-dev /UsersMgmnt /CUsersMgmnt.cpp:23 :(。text + 0x19f):重定位被截断以适合:R_X86_64_PC32对未定义的符号`int nsMsgHandler :: CMsgHandler :: createLocationUserMap()'collect2:error:ld返回1退出状态
I have this Base Class: 我有这个基类:
Header File CMsgHandler.h
namespace nsMsgHandler
{
class CMsgHandler
{
protected:
template<class enhFlags> createLocationUserMap();
};
}
Code File CMsgHandler.cpp 代码文件CMsgHandler.cpp
... some code
using namespace nsMsgHandler;
... some code
template <class enhFlags>
int CMsgHandler::createLocationUserMap()
{
.....
}
This is the derived class: Header File CUsersMgmnt.h 这是派生类:头文件CUsersMgmnt.h
namespace nsUserMgmnt
{
class CUsersMgmnt : public CMsgHandler
{
public:
CUsersMgmnt();
};
}
Code file CUsersMgmnt.cpp 代码文件CUsersMgmnt.cpp
... some code
using namespace nsUserMgmnt;
... some code
CUsersMgmnt::CUsersMgmnt()
{
this->createLocationUserMap<nsUserMgmnt::types::Class1>();
}
I'm pretty sure that there is an error in the code. 我很确定代码中有错误。 I tried to resolve this problem for hours.
我试图解决这个问题几个小时。
You should move your: 你应该移动你的:
template <class enhFlags>
int CMsgHandler::createLocationUserMap()
{
.....
}
to CMsgHandler.h 到CMsgHandler.h
otherwise compiler is not able to instantiate your template in CUsersMgmnt.cpp 否则编译器无法在CUsersMgmnt.cpp中实例化您的模板
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.