C ++ вызывает метод шаблона базового предложения в производном классе

0

Я компилирую в 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 to 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();
    };
}

Файл кода 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>();
}

Я уверен, что в коде есть ошибка. Я пытался решить эту проблему часами.

Теги:
templates
derived-class
cygwin

1 ответ

2
Лучший ответ

Вы должны переместить свой:

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

к CMsgHandler.h

иначе компилятор не сможет создать экземпляр вашего шаблона в CUsersMgmnt.cpp

  • 0
    Большое спасибо, эта работа отлично, еще раз спасибо

Ещё вопросы

Сообщество Overcoder
Наверх
Меню