我在家用计算机上使用Visual C ++编写了一个类的程序,但是,我尝试在学校的Linux计算机上运行它,我发现了这些错误。
std::tr1::unordered_map <string, Word*> map;
这两个错误都出现在
上面的代码行中ISO C ++禁止声明'unordered_map',没有类型
预期';'在'&lt;'标记
之前最初我使用了hash_map但发现只能在Visual C ++中使用
由于
答案 0 :(得分:3)
GCC和MSVC以不同的方式定义TR1扩展,因为TR1标准对于如何向用户提供它是模糊的。它只是指定应该有一些编译器选项来激活TR1。
与MSVC不同,GCC将标头放在TR1
子目录中。有两种方法可以访问它们:
-isystem /usr/include/c++/<GCC version>/tr1
。这更符合要求,但似乎会引起问题。使用条件编译:
#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)
这样,您只需要包含“一次”内容。