我有一个班级
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
提前感谢。
答案 0 :(得分:1)
给出的错误很可能意味着所引用的函数通常不存在,或者在当前编译单元中。
检查以确保它已在类体中定义(在模板化案例的标题中)或正在正确导入(如果来自外部源,例如DLL或库;一个常见问题但不太可能使用模板),包括链接的库。
您的extern
全局变量的形式似乎是正确的,并且通常可以使用模板。该错误似乎特定于您的模板化类,但没有关于该函数是否实际存在于您发布的代码中的信息。