我有课
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
提前致谢。
最佳答案
给出的错误很可能意味着引用的函数根本不存在,通常不存在或在当前编译单元中。
检查以确保它已在类主体中定义(在模板化案例中的标题中)或被正确导入(如果来自外部源,例如 DLL 或库;这是一个常见问题,但不太可能出现在模板中),包括被链接的库。
您的 extern
全局变量的形式似乎是正确的,而且一般来说它确实适用于模板。该错误似乎特定于您的模板化类,但没有关于该函数是否实际存在于您发布的代码中的信息。
关于c++ - 全局模板对象 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7937678/