我正在尝试学习如何在 c++ 中传递指针,但出现错误:没有用于调用"test"的匹配函数。我做错了什么?

I'm trying to learn how to pass pointers in c++, but I get error: no matching function for call to 'test'. What am I doing wrong?

本文关键字:test 调用 用于 错了 什么 函数 学习 c++ 指针 错误      更新时间:2023-10-16

这是我所拥有的:

#include <iostream>
using namespace std;
void test(double &r)
{
r = 0.1;
}
int main() {
double rdefined;
double yo = test(&rdefined);
cout << yo <<endl;
return 0;
}

我尝试将测试函数放在主函数之后并分配 r定义为 0.0 .

函数声明void test(double &r)指定参数通过引用传递而不是作为指针传递。要传递"指针到双精度",请使用:void test(double *r).

尽管在实践中,效果非常相似,但在通过引用传递参数时,您不会显式提供地址;因此,在您的代码中,调用应如下所示。此外,正如 Vettri 给出的答案中所述,您的函数不会返回double值(或者实际上,任何内容,因为它是void(,因此您不能直接从调用变量yo分配变量。

试试这个,作为一种可能的解决方案:

test(rdefined); // Changes the value of "rdefined"
double yo = rdefined; // Assigns modified value to "yo"

有关指针和引用之间差异的讨论,请参阅此处。

更正的解决方案:

#include <iostream>
using namespace std;
double test(double* r)
{
*r = 0.1;
return *r;
}
int main() {
double rdefined;
double yo = test(&rdefined);
cout << yo <<endl;
return 0;
}

您需要指定正确的返回值。您收到一个错误,因为您希望返回测试函数的双精度值,但您将其声明为void

您唯一需要做的就是在函数参数中用 * 替换 &。 这是代码。

#include <iostream>
using namespace std;
void test(double* r)
{
*r = 0.1;
}
int main() {
double rdefined;
test(&rdefined);
cout << rdefined <<endl;
return 0;
}