我的问题是:调用函数的类型/引用/指针符号与函数定义中的参数有区别吗?
出现这个问题是因为我遇到了以下错误:
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
是 myClass
的一个 int
属性。函数是
void myClass::myFunction(double& a, double& b, double *c[24], double *d[30], int& e)
最佳答案
编译器告诉您函数声明中的参数类型与调用函数的方式不匹配。
当您遇到此类错误时,您需要仔细检查每个参数类型并找出导致错误的原因。
在你的例子中,第三个和第四个参数是有问题的。
参数类型 double *c[24]
表示一个包含 24 个指向 double
的指针的数组。
正在使用的参数是 &c
,给定你的声明
double c[24];
表示指向 24 个 double
数组的指针。
解决问题的方法:
方法 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
关于c++ - 输入类型和参数类型之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34905486/