You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 09:02:27