大括号错误打开cl代码 - 使用C++

Joã*_*ulo 2 c++ opencl

我正在关注本教程:http: //simpleopencl.blogspot.com.br/2013/06/tutorial-simple-start-with-opencl-and-c.html

我有3个错误:

错误1) - 解决了

cl::Context context({default_device}); //original code
Run Code Online (Sandbox Code Playgroud)

我刚刚脱下牙箍,没关系.

错误2) - 解决了

if(program.build(default_device)!=CL_SUCCESS){
Run Code Online (Sandbox Code Playgroud)

我只是将"default_device"替换为"all_devices",这没关系.

错误3) - 没有解决

sources.push_back({kernel_code.c_str(),kernel_code.length()});
Run Code Online (Sandbox Code Playgroud)

我不知道该怎么办.Visual Studio指向此错误消息: "IntelliSense:期望表达式"

这是我正在谈论的代码片段:

cl::Device default_device = all_devices[0];
std::cout<< "Using device: "<<default_device.getInfo<CL_DEVICE_NAME>()<<"\n";

cl::Context context(default_device);

cl::Program::Sources sources;

// kernel calculates for each element C=A+B
std::string kernel_code=
    "void kernel simple_add(global const int* A, global const int* B, global int* C)"
    "{"
    "C[get_global_id(0)]=A[get_global_id(0)]+B[get_global_id(0)];"
    "}";
sources.push_back({kernel_code.c_str(),kernel_code.length()});

cl::Program program(context,sources);
if(program.build(all_devices)!=CL_SUCCESS){
    std::cout<<" Error building: "<<program.getBuildInfo<CL_PROGRAM_BUILD_LOG>(default_device)<<"\n";
    exit(1);
}
Run Code Online (Sandbox Code Playgroud)

Tim*_*Tim 5

sources.push_back({kernel_code.c_str(),kernel_code.length()});
Run Code Online (Sandbox Code Playgroud)

可写成

sources.push_back(
    {
        kernel_code.c_str(),kernel_code.length()
    }
);
Run Code Online (Sandbox Code Playgroud)

在大括号之间,它期待一个表达式,一些以结尾的东西;.那是你的错误告诉你的.

现在我不知道如何Sources定义,但在这些括号中

sources.push_back(...);
Run Code Online (Sandbox Code Playgroud)

你必须指定一个由任何类型sources组成的变量,所以可以添加(推回)

这是std::vector<int>ints 组成的一个例子

std::vector<int> myvector;
myvector.push_back(42);
Run Code Online (Sandbox Code Playgroud)

Sources 可能以类似的方式工作