我的问题是:调用函数的类型/引用/指针符号与函数定义中的参数之间是否存在差异?
由于我遇到以下错误,出现了这个问题:
myClass.cpp:358:44: error: no matching function for call to 'myClass::myFunction(double&, double&, double (*)[24], double (*)[30], int&)'
myClass.cpp:358:44: note: candidate is:
myClass.h:29:8: note: void myClass::myFunction(double&, double&, double**, double**, int&)
编译器建议我应该使用double&
作为第一个参数,这是非常奇怪的,因为实际上是给出一个只有double
的变量。第二个参数也一样。但是我可以接受......为什么第三和第四个参数不匹配?
double a,b,c[24],d[30];
myFunction(a, b, &c, &d,e);
e
是int
的{{1}}属性。功能是
myClass
答案 0 :(得分:1)
因为myFunction
需要double *[24]
,这是一个包含24个double*
类型元素的数组,而不是double (*)[24]
,它是指向数组double[24]
的指针,他们不一样。
尝试
double a, b, *c[24], *d[30];
myFunction(a, b, c, d, e);
答案 1 :(得分:1)
编译器告诉你函数声明中的参数类型与调用函数的方式不匹配。
如果出现这样的错误,您需要查看每个参数类型并确定哪个(哪些)是错误的。
在您的情况下,第三和第四个参数是有问题的。
参数类型double *c[24]
表示指向double
的24个指针的数组。
正在使用的参数是&c
,根据您的
double c[24];
表示指向24 double
s。
解决问题的方法:
方法1:更改声明以使用指向数组的指针
void myClass::myFunction(double& a, double& b, double (*c)[24], double (*d)[30], int& e)
然后,通话可以保持不变。
方法2:更改声明以使用指针
void myClass::myFunction(double& a, double& b, double *c, double *d, int& e)
然后将调用更改为:
myFunction(a, b, c, d,e);
// ^^ No & operator
// An array decays to a pointer to the first element
更多指向数组和指针数组的指针:C pointer to array/array of pointers disambiguation