глобальные объекты шаблона c ++ - PullRequest
2 голосов
/ 29 октября 2011

у меня есть класс

class ICIecHdlcSetup
{
 //some thing
};

для создания объекта глобального доступа я делаю это:

//in obj.cpp:
ICIecHdlcSetup obj_ICIecHdlcSetup(0x00,0x00,0x16,0x00,0x00,0xFF);

//in obj.hpp:
extern ICIecHdlcSetup obj_ICIecHdlcSetup;

теперь у меня есть шаблон класса:

template <class TValue>
class ICData
{
//some thing
};

но так же не сработает

//in obj.cpp:
ICData <uint8_t> temperture(7,64,41,0,0,255) ;

//in obj.hpp:
extern ICData <uint8_t> temperture ;

и сделайте эту ошибку:

Error   10  error LNK2019: unresolved external symbol "public: void __thiscall ICData<unsigned char>::set_value(unsigned char)" (?set_value@?$ICData@E@@QAEXE@Z) referenced in function "void __cdecl object_instantiation(void)" (?object_instantiation@@YAXXZ)    E:\sv_repos\Test\Test\VS2010\Test\Test\Objects.obj  Test

спасибо заранее.

1 Ответ

1 голос
/ 29 октября 2011

Данная ошибка, скорее всего, означает, что упомянутая функция просто не существует, вообще или в текущем модуле компиляции.

Убедитесь, что он определен в теле класса (в заголовке в шаблонном регистре) или правильно импортируется (если он поступает из внешнего источника, такого как DLL или библиотека; распространенная проблема, но маловероятная для шаблонов) ), включая библиотеку, с которой связаны ссылки.

Форма вашей глобальной переменной extern выглядит правильной, и это, вообще говоря, работает с шаблонами. Ошибка кажется специфичной для вашего шаблонного класса, но нет информации о том, существует ли эта функция в вашем опубликованном коде.

...