C++ 中的 unordered_map 错误?

发布于 2024-12-29 13:22:19 字数 300 浏览 0 评论 0原文

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

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

的代码行上。

这两个错误都出现在ISO C++ 禁止声明“unordered_map”且没有

预期类型“;” 在“<”之前token

本来我使用 hash_map 但发现只能在 Visual C++ 中使用

谢谢

I was writing a program for a class using Visual C++ on my home computer, however, I tried to run it on school linux computers and I get these errors.

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

Both of these errors appear on the line of code above

ISO C++ forbids declaration of ‘unordered_map’ with no type

expected ‘;’ before ‘<’ token

Originally I used hash_map but found out that could only be used in Visual C++

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

瑾夏年华 2025-01-05 13:22:19

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

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

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

    <前><代码>#ifdef __GNUC__
    #include;
    #别的
    #include;
    #endif

    这暴露了GCC的不合规之处:TR1不是通过设置选项来激活的,而是通过修改代码来激活的。

    有一种有点深奥的方法可以解决这个问题:计算标头名称。

    <前><代码>#ifdef __GNUC__
    #define TR1_HEADER(x);
    #别的
    #define TR1_HEADER(x);
    #endif

    #include TR1_HEADER(unordered_map)

    这样,您只需“包含一次”即可。

GCC and MSVC define the TR1 extensions in different ways, because the TR1 standard is vague about how it should be supplied to the user. It simply specifies that there should be some compiler option to activate TR1.

Unlike MSVC, GCC puts the headers in a TR1 subdirectory. There are two ways to access them:

  1. Add a command-line option -isystem /usr/include/c++/<GCC version>/tr1. This is more conformant but appears to cause problems.
  2. Use conditional compilation:

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

    This exposes GCC's nonconformance: TR1 is not activated by setting an option, but instead by modifying the code.

    There is a somewhat esoteric way around this: computed header names.

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

    This way, you only have to include things "once."

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文