C++函数返回两个值报错:无法将std::pair转换为int
嘿,这个问题我太熟了!你遇到的错误根源特别明确:你的函数声明说要返回int类型,但实际在函数里返回的是std::pair<int,int>(或者自定义结构体),这俩类型完全不兼容,编译器当然会给你报错啦。
我给你两个最常用的解决方案,你可以根据自己的需求选:
方案一:直接把函数返回类型改成std::pair<int,int>
这是最直接的方式,既然你要返回两个整数,用标准库的pair刚好合适。记得要包含<utility>头文件,不然编译器找不到pair的定义。修改后的代码大概是这样:
#include <utility> // 必须加这个头! std::pair<int, int> wyszukanieKR(char **tablica, char **wzorzec) { std::pair<int, int> wspolrzedne; int hash_wzorzec = _hash(0, 0, 9, 3, wzorzec); int hash_tablica = 0; for(int i = 0; i < 84-9; i++) { for(int j = 0; j < 13-3; j++) { hash_tablica = _hash(i, j, 9, 3, tablica); if(hash_wzorzec == hash_tablica) { // 找到匹配后设置坐标 wspolrzedne.first = i; wspolrzedne.second = j; return wspolrzedne; // 现在返回的类型和函数声明一致了 } } } // 如果没找到匹配,返回一个标记值,比如(-1,-1) return std::make_pair(-1, -1); }
调用这个函数的时候,你可以这样获取结果:
auto result = wyszukanieKR(tablica, wzorzec); if(result.first != -1 && result.second != -1) { // 处理找到的坐标result.first和result.second }
方案二:用引用参数传递返回值
如果你不想改变函数的返回类型(比如需要返回一个状态码,同时带出坐标),可以把要返回的两个值通过引用参数传递出去。代码示例:
// 函数返回值改成bool,表示是否找到匹配 bool wyszukanieKR(char **tablica, char **wzorzec, int &x, int &y) { // 先初始化默认值 x = -1; y = -1; int hash_wzorzec = _hash(0, 0, 9, 3, wzorzec); int hash_tablica = 0; for(int i = 0; i < 84-9; i++) { for(int j = 0; j < 13-3; j++) { hash_tablica = _hash(i, j, 9, 3, tablica); if(hash_wzorzec == hash_tablica) { x = i; y = j; return true; // 找到匹配,返回true } } } return false; // 没找到,返回false }
调用的时候这样用:
int x, y; if(wyszukanieKR(tablica, wzorzec, x, y)) { // 找到了,x和y就是对应的坐标 } else { // 没找到匹配的处理逻辑 }
关于你尝试的自定义结构体
你之前用自定义结构体还是报错,原因和用pair一样:函数声明返回int,但你返回的是结构体对象,类型不匹配。只要把函数的返回类型改成你的结构体类型就好了,比如:
// 先定义结构体 struct Wspolrzedne { int x; int y; }; // 函数返回类型改成结构体 Wspolrzedne wyszukanieKR(char **tablica, char **wzorzec) { Wspolrzedne wsp; // ... 中间逻辑和之前一样 ... wsp.x = i; wsp.y = j; return wsp; }
总的来说,核心问题就是函数声明的返回类型和实际返回值的类型必须一致,只要把这俩对齐,错误就消失啦!
内容的提问来源于stack exchange,提问作者Martix
相关产品推荐
相关产品推荐

