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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:28:50