我收到错误
error: use of undeclared identifier '__stl_hash_string'
{ return __stl_hash_string( __s.c_str() ); }
在 Mac OS 10.8 上使用 Xcode 4.6.1 进行编译。
/-----下面的代码片段 ----/
#ifdef __cplusplus
namespace __gnu_cxx
{
template<>
struct hash<std::string>
{
size_t operator()(const std::string& __s) const
{ return __stl_hash_string( __s.c_str() ); }
};
}
#endif
/------------------------------------------------/ 该代码在 Mac OSX 10.7 和 10.6 上的 Xcode 3.5 中运行得非常好。
我搜索了 __STL_hash_string
方法,发现它存在于文件夹中
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.8.sdk/usr/include/c++/4.2.1/ext/hash_fun.h
但是,当我编写示例应用程序以查看是否可以包含此 header 时,它失败了。
#include < cstddef >
#include < ext/hash_fun.h >
在第二行给我错误说不能包含此 header 。我不确定此方法在新环境中是否已弃用,如果已弃用,那么替代方法是什么。我请求您帮助解决这个问题。
最佳答案
看起来这个函数是在 libstdc++ 中定义的。该库在 Xcode 3.5 中是默认的,现在 Xcode 默认使用 libc++。但您仍然可以在 C++ 标准库
build设置中将其切换到 libstdc++。
但如果你可以在你的项目中使用C++11,我建议你使用标准std::hash函数 fo string 并且不依赖内部 std 函数。
关于c++ - 收到错误 error : use of undeclared identifier '__STL_hash_string' { return __STL_hash_string( __s. c_str() ); },我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16260992/