C+中无序#u映射的错误+;? 我在家里用Visual C++编写了一个程序,但是我尝试在学校Linux电脑上运行,我得到了这些错误。 std::tr1::unordered_map <string, Word*> map; std::tr1::无序地图;

C+中无序#u映射的错误+;? 我在家里用Visual C++编写了一个程序,但是我尝试在学校Linux电脑上运行,我得到了这些错误。 std::tr1::unordered_map <string, Word*> map; std::tr1::无序地图;,c++,linux,hashmap,unordered-map,C++,Linux,Hashmap,Unordered Map,这两个错误都出现在上面的代码行中 ISO-C++禁止声明“无序”地图,没有类型< /p> 期望“;”在“之前,GCC和MSVC以不同的方式定义了TR1扩展,因为TR1标准对于如何向用户提供它是模糊的。它只是指定应该有一些编译器选项来激活TR1 与MSVC不同,GCC将头放在TR1子目录中。有两种方法可以访问它们: 添加命令行选项-isystem/usr/include/c++//tr1。这更符合要求,但似乎会导致问题 使用条件编译: #ifdef __GNUC__ #include <t

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

ISO-C++禁止声明“无序”地图,没有类型< /p>


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

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

  • 添加命令行选项
    -isystem/usr/include/c++//tr1
    。这更符合要求,但似乎会导致问题
  • 使用条件编译:

    #ifdef __GNUC__
    #include <tr1/unordered_map>
    #else
    #include <unordered_map>
    #endif
    
    \ifdef\uu GNUC__
    #包括
    #否则
    #包括
    #恩迪夫
    
    这暴露了GCC的不一致性:TR1不是通过设置选项激活的,而是通过修改代码激活的

    有一种有点深奥的方法:计算头名称

    #ifdef __GNUC__
    #define TR1_HEADER(x) <tr1/x>
    #else
    #define TR1_HEADER(x) <x>
    #endif
    
    #include TR1_HEADER(unordered_map)
    
    \ifdef\uu GNUC__
    #定义TR1_标题(x)
    #否则
    #定义TR1_标题(x)
    #恩迪夫
    #包括TR1\u标题(无序映射)
    
    这样,您只需“一次”包含内容

  • 啊,也见。显然有一个提升。TR1但它并不完美。