我正在尝试学习如何在 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?
这是我所拥有的:
#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;
}
相关文章:
- 什么时候调用组成单元对象的析构函数
- 对RValue对象调用的LValue ref限定成员函数
- 为什么使用 "this" 指针调用派生成员函数?
- 函数调用中参数的顺序重要吗
- OpenGL - 在抛出"__gnu_cxx::recursive_init_error"实例后终止调用?
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- 在c++类上调用void函数
- 为什么 std::unique 不调用 std::sort?
- 调用专用模板时出错"no matching function for call to [...]"
- 选择要调用的构造函数
- C++为什么尽管我调用了void函数,它却不起作用
- 构造函数正在调用一个使用当前类类型的函数
- 变量没有改变?通过向量的函数调用
- 没有为自己的结构调用列表推回方法
- 调用'begin(int [n])'没有匹配函数
- 什么时候调用析构函数
- 我正在尝试学习如何在 c++ 中传递指针,但出现错误:没有用于调用"test"的匹配函数。我做错了什么?
- 如何期望通过使用Google Test(Mock)以特定频率调用函数
- 使用 make test 运行程序并直接调用它时出现奇怪的行为 ./prog