c++ - 输入类型和参数类型之间的区别

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

emyClass 的一个 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/

相关文章:

c++ - 头文件与源文件中的外部函数

使用自定义协议(protocol)时的 C++ 应用程序根目录

c - C 中的函数指针

php - 预增量与后增量

pointers - 为什么 Deref::deref 的返回类型本身就是一个引用?

c++ - 确保构造类的静态成员

c++ - 如何选择带有类型参数的成员变量?

c - 为什么这段 C 代码不更改字符串并导致缓冲区溢出?

c++ - 传递对指针的引用

c++ - 使用行为不同的引用返回 tmp