我有以下代码:
(*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
。
writeOutputToBufferBuf
是cl::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();
}