这是来自 OpenCL 教程。我有:
void* args[4] = {(void*)5, (void*)123, NULL, NULL};
cl_mem mem_list[2] = {mem_d1, mem_d2}; // mem_d1 and mem_d2 are cl_mem objects
void* args_mem_loc[2] = {&args[2], &args[3]};
status = clEnqueueNativeKernel(*queue, nativeKernel, args, 4, 2, mem_list, args_mem_loc, 0, NULL, NULL); // http://www.khronos.org/registry/cl/sdk/1.0/docs/man/xhtml/clEnqueueNativeKernel.html
我不断收到编译器错误(在status = clEnqueueNativeKernel(*queue ...它正在谈论的参数是args_mem_loc)的行上。
error C2664: 'clEnqueueNativeKernel' : cannot convert parameter 7 from 'void *[2]' to 'const void **'
args_mem_loc 是一个指向 void 指针数组的 void 指针,它使用的所有变量都是在堆栈上创建的(对吗?我很确定)。那么为什么编译器会认为它是 void* [2] 呢?