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

C++模板返回值类型不匹配错误求助:无法转换_Ty2*到std::pair<T*,unsigned int>

错误C2440的原因及修正

核心原因

你的Find方法声明返回值类型std::pair<T*, unsigned int>,但实际返回的是指针类型:

  • 找到元素时返回的&itr->second是std::pair<T*, unsigned int>*(指向pair的指针)
  • 找不到时返回的nullptr是空指针
    编译器无法将指针类型直接转换为对应的pair值类型,因此抛出C2440类型转换错误。

两种修正方案

方案1:返回pair值(处理找不到的默认情况)

如果希望返回pair的副本,找不到时返回一个默认构造的pair(比如指针为空、计数为0):

template<typename T>
class Tes 
{
    unordered_map < string, pair<T*, unsigned int>> m_resources;
public:
    pair<T*, unsigned int> Find(const string& l_id)
    {
        auto itr = m_resources.find(l_id);
        return (itr != m_resources.end() ? itr->second : pair<T*, unsigned int>{nullptr, 0});
    }
};

方案2:返回pair指针(允许空值)

如果希望通过指针返回找到的元素(找不到时返回nullptr),需要修改方法的返回类型为指针:

template<typename T>
class Tes 
{
    unordered_map < string, pair<T*, unsigned int>> m_resources;
public:
    pair<T*, unsigned int>* Find(const string& l_id)
    {
        auto itr = m_resources.find(l_id);
        return (itr != m_resources.end() ? &itr->second : nullptr);
    }
};

// 调用时也要对应调整类型:
int main()
{
    Tes<int> t;
    pair<int*, unsigned int>* tes2 = t.Find("tes");
}

内容的提问来源于stack exchange,提问作者lie ardi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 15:48:22