【问题标题】:C++ calling a template method of a base clase in a derived classC++ 在派生类中调用基类的模板方法
【发布时间】:2014-03-22 01:22:08
【问题描述】:

我在 cygwin 中使用 gcc 4.8.2 进行编译,编译完成时没有出现错误。但链接后,我收到以下消息:

bin/libUsersMgmnt.a(CUsersMgmnt.cpp.o):在函数中 nsUserMgmnt::CUsersMgmnt::CUsersMgmnt()': /home/HCAST2/v1.05-dev/UsersMgmnt/CUsersMgmnt.cpp:23: undefined reference toint 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();
    };
}

代码文件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>();
}

我很确定代码中存在错误。我试图解决这个问题几个小时。

【问题讨论】:

    标签: c++ templates cygwin derived-class


    【解决方案1】:

    你应该移动你的:

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

    到 CMsgHandler.h

    否则编译器无法在 CUsersMgmnt.cpp 中实例化您的模板

    【讨论】:

      猜你喜欢
      • 2016-08-17
      • 1970-01-01
      • 1970-01-01
      • 2014-09-05
      • 2017-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多