c++ - 收到错误 error : use of undeclared identifier '__STL_hash_string' { return __STL_hash_string( __s. c_str() ); }

标签 c++ macos osx-mountain-lion xcode4.6

我收到错误

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/

相关文章:

macos - “导出 : command not found

google-app-engine - 可以在 Mountain Lion 中使用 GAE over LAN 测试网站吗?

c++ - Cuda(NVCC)编译器的_ITERATOR_DEBUG_LEVEL?

c++ - 在程序结束之前不执行所有写入

c++ - "Empty base optimization"用于 lambda 捕获 - 被标准禁止?为什么?

objective-c - 如何获得 MacOS 上特定用户的首选语言?

swift - 从 XIB 加载 View 并获取 nil macOS 应用程序

css - 谷歌字体在某些 Mac 上不工作

python - 运行 python 时如何永久接受 OSX 防火墙允许/拒绝确认?

c++ - DLL中静态变量的状态