C++ 中的 unordered_map 错误?
我正在家用计算机上使用 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
GCC 和 MSVC 以不同的方式定义 TR1 扩展,因为 TR1 标准对于如何向用户提供它是模糊的。它只是指定应该有一些编译器选项来激活 TR1。
与 MSVC 不同,GCC 将标头放在
TR1
子目录中。有两种方法可以访问它们:-isystem /usr/include/c++//tr1
。这更符合要求,但似乎会引起问题。使用条件编译:
<前><代码>#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:-isystem /usr/include/c++/<GCC version>/tr1
. This is more conformant but appears to cause problems.Use conditional compilation:
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.
This way, you only have to include things "once."