朋友&指针

时间:2016-06-29 09:39:40

标签: c++ pointers opencl

我有以下代码:

(*writeOutputToBuffer)(cl::EnqueueArgs(*queue, cl::NullRange, cl::NDRange(netSpec[lastLayerIndex]), cl::NullRange), writeOutputToBufferBuf[0], writeOutputToBufferBuf[1], lastLayerIndex);

其中writeOutputToBufferBuf[0]包含cl::Buffer

writeOutputToBufferBuf[1]包含另一个cl::Buffer

lastLayerIndex包含int

writeOutputToBufferBufcl::Buffer

的向量

在自己的类中使用上面的代码完全正常。成功的电话就是:

  

(cl :: make_kernel< cl :: Buffer,cl :: Buffer,int>)(cl :: EnqueueArgs,cl :: Buffer&,cl :: Buffer&,int&)

内核初始化为:

 std::shared_ptr<cl::make_kernel<cl::Buffer, cl::Buffer, int>> writeOutputToBuffer;

但是当我在朋友班中使用它们时如下:

(fullyConnectedPortion->writeOutputToBuffer)(cl::EnqueueArgs(*queue, cl::NullRange,
                        cl::NDRange(outputSize), cl::NullRange),  (fullyConnectedPortion->writeOutputToBufferBuf[0]),
                            (fullyConnectedPortion->writeOutputToBufferBuf[1]), (fullyConnectedPortion->lastLayerIndex));

它会返回此错误:

  

无法匹配'(std :: shared_ptr&lt; cl :: make_kernel&lt; cl :: Buffer,cl :: Buffer,int&gt;&gt;)(cl :: EnqueueArgs,cl :: Buffer&amp;,cl :: Buffer&amp;,int&amp;)'

如何解决此问题?

我试着在下面做一个更详细的例子,我希望它有所帮助。实际的代码行太长了,无法在此发布,需要openCL才能编译。我认为它应该是我使用指针的问题。

class FCN{
public:

    std::vector<cl::Buffer> writeOutputToBufferBuf;
    friend class NeuralNetwork;

    void initialize();

private:
    std::shared_ptr<cl::make_kernel<cl::Buffer, cl::Buffer, int>> writeOutputToBuffer;
}

class NN{
public:
    FCN* FCNN;

    void calc();
}

void FCN::initialize(){
//puts data into writeOutputToBufferBuf
}

void NN::calc(){

 (fullyConnectedPortion->writeOutputToBuffer)(cl::EnqueueArgs(*queue, cl::NullRange,
                        cl::NDRange(outputSize), cl::NullRange),  (fullyConnectedPortion->writeOutputToBufferBuf[0]),
                            (fullyConnectedPortion->writeOutputToBufferBuf[1]), (fullyConnectedPortion->lastLayerIndex));

}

int main(){

 NN *nnnet = new NN;
 FCN *fcnet = new FCN;

 (*FCN).initialize();
 (*NN).calc();
}

0 个答案:

没有答案