如何让Visual Studio将编译错误定位到用户代码而非标准库文件
定位xhash相关C2064编译错误的实操方法
- 查看完整编译输出栈,不要仅依赖错误列表窗口。操作路径:点击VS菜单栏
视图→输出,将输出窗口的展示内容切换为生成,向上翻找完整错误日志,你会看到模板实例化的完整调用链,会依次展示标准库头文件的实例化路径,最末尾的调用源就是你自己代码中定义、使用出问题的unordered_map的具体位置,会附带精确的文件名和行号。 - 用替换法快速定位:将你代码中所有
unordered_map先临时注释,或者替换为不需要哈希函数的map,再逐个恢复unordered_map的使用,每次恢复后编译一次,出现报错时对应的就是出问题的unordered_map定义位置。 - 你可以先排查常见触发原因缩小范围,该错误90%以上是
unordered_map参数不符合要求导致:- 自定义key类型没有提供匹配的哈希函数,或者哈希函数签名错误,要求接收1个const修饰的key类型参数,返回值为
size_t - 提供的哈希函数是仿函数类,但没有重载
operator(),或者重载时的参数个数、类型不符合要求 - 自定义key的判等函数签名不匹配
unordered_map的要求
- 自定义key类型没有提供匹配的哈希函数,或者哈希函数签名错误,要求接收1个const修饰的key类型参数,返回值为
内容的提问来源于stack exchange,提问作者Qman
相关产品推荐
相关产品推荐

