hash_compare:不是“std”的成员
时间: 2023-12-15 13:05:20 浏览: 592
`hash_compare`不是`std`的成员,它是一个被淘汰的类模板,用于定义自定义哈希函数和元素比较函数的组合。它在C++11标准中被`std::unordered_set`和`std::unordered_map`所取代,这些容器提供了更好的方式来定义自定义哈希函数和元素比较函数。如果您需要自定义哈希函数和比较函数,请使用`std::hash`和`std::equal_to`等标准库函数对象,或者使用lambda表达式来定义自定义函数。
相关问题
error C2039: “hash_compare”: 不是 “std” 的成员 原因分析
这个错误通常是因为在使用 STL 中的 hash_map 或 hash_set 时,没有包含 functional 头文件。在 functional 中定义了 hash_compare 类型,它是 hash_map 和 hash_set 中用来比较键值的默认比较器。因此,如果没有包含 functional 头文件,编译器就无法找到 hash_compare 类型,从而导致该错误。解决方法是在代码中包含 functional 头文件,如下所示:
```c++
#include <functional>
```
opencv error C2039: "hash_compare": 不是 "std" 的成员, 原因分析与修复
问题描述:
在使用 OpenCV 库时,出现了如下错误:
error C2039: “hash_compare”: 不是 “std” 的成员
原因分析:
该错误通常是由于使用了非标准的编译器或编译器版本不兼容导致的。在编译过程中,OpenCV 可能使用了 std 命名空间中的 hash_compare 类型,但是编译器并没有实现该类型,因此会出现上述错误。
修复方法:
可以尝试以下几种方法修复该错误:
1. 更新编译器
尝试更新编译器到最新版本,或使用标准的编译器,例如 Visual Studio。
2. 使用命名空间 std::tr1
在代码中使用 std::tr1 命名空间,而不是 std 命名空间,例如:
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
using namespace std::tr1; // 使用 std::tr1 命名空间
int main()
{
// your code here
return 0;
}
3. 修改源代码
如果必须使用旧版编译器或无法使用 std::tr1 命名空间,可以修改 Opencv 源代码,将使用 hash_compare 类型的地方改为使用 std::hash_compare 类型。修改的具体位置和方式需要根据具体的错误信息进行调整。
总之,该错误通常是由于编译器版本不兼容或使用了非标准的编译器导致的,解决方法是更新编译器或修改 Opencv 源代码。
阅读全文