全局模板对象c ++

时间:2011-10-29 07:56:45

标签: c++ templates object global

我有一个班级

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 个答案:

答案 0 :(得分:1)

给出的错误很可能意味着所引用的函数通常不存在,或者在当前编译单元中。

检查以确保它已在类体中定义(在模板化案例的标题中)或正在正确导入(如果来自外部源,例如DLL或库;一个常见问题但不太可能使用模板),包括链接的库。

您的extern全局变量的形式似乎是正确的,并且通常可以使用模板。该错误似乎特定于您的模板化类,但没有关于该函数是否实际存在于您发布的代码中的信息。