错误:没有用于调用c ++的匹配函数

时间:2017-12-04 09:46:54

标签: c++

我在g ++中得到了这个错误;

  

错误:没有匹配函数来调用'CudnnRun :: cudnnAddTensor_run(float [1] [2] [3] [3],float [1] [2] [3] [3],const int&,const int&,const int&)'

我在cpp文件中写道,就像这样。

const int mb_size = 1;
const int feature_num = 2;
const int in_size = 3;

float in_data[mb_size][feature_num][in_size][in_size] = {
   {
     { { 0, 1, 0 }, { 0, 1, 0 }, { 0, 1, 0 } },
     { { 1, 1, 1 }, { 1, 1, 1 }, { 1, 1, 1 } }
   }
  };
float out_data[mb_size][feature_num][in_size][in_size] = {
  {
    { { 3, 1, 1 }, { 0, 1, 0 }, { 0, 1, 0 } },
    { { 10, 1, 1 }, { 1, 1, 1 }, { 1, 1, 1 } }
  }
};

CudnnRun m1;
m1.cudnnAddTensor_run(in_data,out_data,mb_size,feature_num,in_size);

在头文件中,

class CudnnRun
{
  public:
    void cudnnAddTensor_run(float *in_data,float *out_data,int mb_size,int feature_num,int in_size);
};

我打算匹配函数参数的类型,为什么会出现这样的错误?

1 个答案:

答案 0 :(得分:1)

in_dataout_data四维数据块!为此,您的初始化声明对我来说是任意的。

函数调用站点处的指针衰减基本上会折叠最外层维度。请记住,C ++不支持变长数组,类成员函数的函数原型需要

void cudnnAddTensor_run(
    float(*in_data)[1][2][3],
    float (*out_data)[1][2][3],
    int mb_size,
    int feature_num,
    int in_size
);                                                                             

,最后3个参数在这里似乎是多余的。

你能不能将问题减少到一个连续的一维数组,并使用聪明的索引来获得你想要的元素?