输入类型和参数类型之间的差异

时间:2016-01-20 16:35:07

标签: c++ pointers reference

我的问题是:调用函数的类型/引用/指针符号与函数定义中的参数之间是否存在差异?

由于我遇到以下错误,出现了这个问题:

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);

eint的{​​{1}}属性。功能是

myClass

2 个答案:

答案 0 :(得分:1)

因为myFunction需要double *[24],这是一个包含24个double*类型元素的数组,而不是double (*)[24],它是指向数组double[24]的指针,他们不一样。

尝试

double a, b, *c[24], *d[30];
myFunction(a, b, c, d, e);

LIVE

答案 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