我在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);
};
我打算匹配函数参数的类型,为什么会出现这样的错误?
答案 0 :(得分:1)
in_data
和out_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个参数在这里似乎是多余的。
你能不能将问题减少到一个连续的一维数组,并使用聪明的索引来获得你想要的元素?