C++传递指针时遇“no matching function for call to test”错误,求排查
分析你的C++代码错误
嘿,我来帮你拆解下这段代码里的问题,你遇到的no matching function for call to 'test'报错,其实是两个关键问题叠加导致的:
问题1:参数类型完全不匹配
你定义的test函数参数是左值引用:double &r,这意味着调用它的时候需要直接传入一个double类型的变量(引用是变量的别名,不需要取地址)。但你调用时传的是&rdefined,这是一个double*类型的指针(变量的地址)——引用和指针是完全不同的两种类型,编译器找不到能接收指针的test函数,所以抛出了匹配错误。
问题2:void函数不能被赋值
你的test函数声明为void,表示它没有任何返回值,但你却写了double yo = test(...),试图把一个无返回值的函数调用结果赋值给变量yo,这也是C++不允许的操作。
修正方案1:保留引用传递(推荐)
既然你定义的是引用参数,就直接传变量名,利用引用的特性修改原变量的值,然后直接输出原变量即可:
#include <iostream> using namespace std; void test(double &r) { r = 0.1; } int main() { double rdefined; test(rdefined); // 直接传入变量,引用会关联到rdefined cout << rdefined << endl; // 输出被修改后的rdefined return 0; }
修正方案2:改用指针传递(如果你想练习指针)
如果你的目标是学习指针传递,那需要把test的参数改成指针类型,调用时传变量地址,并且在函数内部解引用指针来修改值:
#include <iostream> using namespace std; void test(double *r) { *r = 0.1; // 解引用指针,修改它指向的变量值 } int main() { double rdefined; test(&rdefined); // 传入变量的地址(指针) cout << rdefined << endl; return 0; }
修正方案3:让函数返回值
如果你只是想得到0.1这个值,也可以把test改成有返回值的函数,这样就能直接赋值给变量:
#include <iostream> using namespace std; double test() { return 0.1; } int main() { double yo = test(); cout << yo << endl; return 0; }
内容的提问来源于stack exchange,提问作者mindvoyager
相关产品推荐
相关产品推荐

