为了使用OpenCL而重新学习C ++。我创建了一个名为CheckDevice的Helper类,它有一堆用于获取设备统计信息的样板代码。
CheckDevice.h
class Utils
{
public:
Utils(){};
~Utils(){};
template<class T>
static bool IsNull(T Object, char* name);
private:
};
CheckDevice.cpp
cl_command_queue Utils::CreateCommandQueue(cl_context context, cl_device_id *device)
{
cl_int err;
cl_device_id *devices;
cl_command_queue queue = NULL;
size_t deviceBufferSize = -1;
cl_kernel kernel = 0;
Utils::IsNull<cl_command_queue>(queue, "Utils::CreateCommandQueue::queue");
return queue;
}
的main.cpp
void main()
{
cl_kernel kernel = 0;
Utils::IsNull<cl_kernel>(kernel, "clCreateKernel");
}
问题是当从CheckDevice.cpp中调用函数Utils :: IsNull时它工作正常,但是当从main.cpp调用时,我在Visual Studios 2012中得到以下内容
错误LNK2019:未解析的外部符号“public:static bool __cdecl Utils :: IsNull(struct _cl_kernel *,char *)”(?? $ IsNull @ PAU_cl_kernel @@@ Utils @@ SA_NPAU_cl_kernel @@ PAD @ Z) function _main 1&gt; C:\ Users \ Suri \ Documents \ Visual Studio 2012 \ Projects \ HelloWorld \ Debug \ HelloWorld.exe:致命错误LNK1120:1未解析的外部
任何帮助都会得到解决
答案 0 :(得分:1)
您没有显示IsNull
模板的实现,但可能是CheckDevice.cpp
。它应该放在CheckDevice.h
中,编译器需要看到它的定义才能实例化它。
答案 1 :(得分:-2)