在OpenCL clCreateContext中从void(*)(..)到void(*)(..)的转换无效
Invalid conversion from void (*) (...) to void (*) (...) in OpenCL clCreateContext
我正在采取我的第一步进入c++和OpenCL来执行并行计算,但是我遇到了一个错误,试图将侦听器函数传递给clCreateContext。我的程序(未显示)没有错误地崩溃,所以我需要添加一个函数来将OpenCL错误转发到stdout/stderr。clCreateContext函数有一个函数指针的参数,可以设置为将错误消息转发到标准输出或标准错误。我得到一个编译时错误,但使用Codeblocks/MinGW:
invalid conversion from 'void (*)(const char*, const void*, size_t, void*)' to
'void (*)(const char*, const void*, size_t, void*)'
我在下面的代码中重复了这个问题:
#include <stdlib.h>
#include <stdio.h>
#include <CLcl.h>
void pfn_notify(const char *errinfo, const void *private_info, size_t cb, void *user_data)
{
fprintf(stderr, "OpenCL Error (via pfn_notify): %sn", errinfo);
}
int main()
{
/*Get platform and device info*/
cl_platform_id platform_id = NULL;
cl_uint ret_num_platforms;
cl_int ret = clGetPlatformIDs(1, &platform_id, &ret_num_platforms);
cl_device_id device_id = NULL;
cl_uint ret_num_devices;
ret = clGetDeviceIDs(platform_id, CL_DEVICE_TYPE_GPU, 1, &device_id, &ret_num_devices);
/*Create openCL context*/
cl_context context = clCreateContext(NULL, 1, &device_id, &pfn_notify, NULL, &ret);
/*Some line after this throws an error*/
}
我已经看到使用这个确切的方法和pfn_notify工作的代码示例,我不确定为什么我的程序甚至没有编译。
您需要将您的函数声明为
void CL_CALLBACK pfn_notify(.....
正如评论者所指出的;如果这段代码是在c++文件中,那么它也需要是:
extern "C" void CL_CALLBACK pfn_notify(.....
相关文章:
- Boost buffer_cast 无法从 void* 转换为 PointerToPodType
- 将void*转换为某种类型的shared_ptr
- 如何将 void* 转换为函数指针?
- 对 C++ 中的特定标头使用 extern C 关键字是否允许从 void* 转换为 char*?
- 如何将 void 转换为 typedef void(..)(浮动)
- 无法将参数 1 从"int (__thiscall A::* *)(void)"转换为"int (__cdecl *)(void)"
- 从 'void *' 转换为 'const std::string *&' 必须具有所有中间指针 const 合格
- x = malloc(n * sizeof (int));无法将 void 转换为 int
- 错误:请求从“ void”转换为“ QString”的非量表类型
- 使用 LLVM 从 const void * 转换为模板类型时出现问题
- 如何修复错误:请求从"void"转换为非标量类型"std::vector<int>"
- void* 转换为基类并调用虚函数
- 将 void* 转换为 std::function<void()>
- 无法将参数 4 从 'void' 转换为'const char *'
- C++11 无法将 std::condition_variable::wait 从 'void' 转换为 'bool'
- 如何在 C++11 中将"const void*"转换为函数指针?
- 似乎无法在 c++ 中将 void* 转换为结构
- 将 void 转换为字节
- void * 转换为 int 语法的问题
- C++从类型“void*”转换为类型“double”无效