求助:编译报错no matching function for call to 'maps::size(char [20], char&)'
解决
Bloc[Error] no matching function for call to 'maps::size(char [20], char&)'编译错误 这个错误本质是你调用maps::size时传入的参数类型,和类中定义的size函数的参数类型不匹配,编译器找不到符合你传入参数的函数版本。我帮你梳理几个最可能的排查方向:
先核对
maps类中size函数的声明/定义
打开你的maps类头文件,看看size函数的参数列表是什么样的。比如:- 如果函数声明是
int size(const std::string& input_str, char target_char);,而你调用时传的是char[20](会退化为char*)和char&,这时候char*无法隐式转换为std::string&,就会触发这个错误。 - 也有可能函数的参数顺序和你调用的相反,比如函数是
size(char c, const char* str),但你写成了size(arr, ch),参数类型顺序不匹配也会导致编译器找不到对应函数。
- 如果函数声明是
检查数组参数的隐式转换问题
你传入的第一个参数是char[20],在函数调用中它会自动退化为char*指针。如果maps::size的第一个参数要求的是固定大小的数组引用(比如char (&arr)[20]),那只有当你传入的数组大小刚好是20时才匹配;如果数组大小不对,或者函数期望的是其他类型(比如std::string),都会报错。排查重载或命名空间问题
如果maps类里有多个size的重载函数,你当前传入的参数组合刚好没有对应的重载版本,编译器也会报这个错。另外,别忘了确认你是不是正确使用了maps所在的命名空间——如果类在某个命名空间里,调用时没加命名空间前缀,编译器可能会找错函数。快速测试的小技巧
你可以尝试显式转换参数类型来验证问题:char your_arr[20] = "test content"; char& your_char = some_char; maps map_instance; // 把char数组转成std::string再传递 map_instance.size(std::string(your_arr), your_char);如果这样能编译通过,那基本可以确定是参数类型不匹配导致的问题,接下来只要调整函数声明或者调用时的参数类型即可。
内容的提问来源于stack exchange,提问作者matteo camillo
相关产品推荐
相关产品推荐

