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
相关产品推荐
相关产品推荐

