Я компилирую в 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>();
}
Я уверен, что в коде есть ошибка. Я пытался решить эту проблему часами.
Вы должны переместить свой:
template <class enhFlags>
int CMsgHandler::createLocationUserMap()
{
.....
}
к CMsgHandler.h
иначе компилятор не сможет создать экземпляр вашего шаблона в CUsersMgmnt.cpp