C ++中unordered_map的错误?

时间:2012-01-28 23:23:36

标签: c++ linux hashmap unordered-map

我在家用计算机上使用Visual C ++编写了一个类的程序,但是,我尝试在学校的Linux计算机上运行它,我发现了这些错误。

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

这两个错误都出现在

上面的代码行中

ISO C ++禁止声明'unordered_map',没有类型

预期';'在'&lt;'标记

之前

最初我使用了hash_map但发现只能在Visual C ++中使用

由于

1 个答案:

答案 0 :(得分:3)

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

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

  1. 添加命令行选项-isystem /usr/include/c++/<GCC version>/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)
    

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