【问题标题】:Errors with unordered_map in C++?C++ 中的 unordered_map 错误?
【发布时间】:2012-01-28 23:23:36
【问题描述】:

我在家用计算机上使用 Visual C++ 为班级编写程序,但是,我尝试在学校的 linux 计算机上运行它,但出现了这些错误。

std::tr1::unordered_map <string, Word*> map;

这两个错误都出现在上面的代码行中

ISO C++ 禁止声明没有类型的“unordered_map”

在“

本来我用的是hash_map,后来发现只能在Visual C++中使用

谢谢

【问题讨论】:

    标签: c++ linux hashmap unordered-map


    【解决方案1】:

    GCC 和 MSVC 以不同的方式定义 TR1 扩展,因为 TR1 标准对如何将其提供给用户的方式含糊不清。它只是指定应该有一些编译器选项来激活 TR1。

    与 MSVC 不同,GCC 将标头放在 TR1 子目录中。有两种方法可以访问它们:

    1. 添加命令行选项-isystem /usr/include/c++/&lt;GCC version&gt;/tr1。这更符合要求,但似乎会导致问题。
    2. 使用条件编译:

      #ifdef __GNUC__
      #include <tr1/unordered_map>
      #else
      #include <unordered_map>
      #endif
      

      这暴露了 GCC 的不一致性:TR1 不是通过设置选项来激活的,而是通过修改代码来激活的。

      对此有一种有点深奥的方法:计算标题名称。

      #ifdef __GNUC__
      #define TR1_HEADER(x) <tr1/x>
      #else
      #define TR1_HEADER(x) <x>
      #endif
      
      #include TR1_HEADER(unordered_map)
      

      这样,您只需包含“一次”的内容。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-02
    相关资源
    最近更新 更多