C++中的无序映射出错
Errors with unordered_map in C++?
我在家用电脑上使用Visual C++为一个班编写程序,但我试图在学校的linux电脑上运行它,但我遇到了这些错误。
std::tr1::unordered_map <string, Word*> map;
这两个错误都出现在上方的代码行上
ISO C++禁止声明没有类型的"无序映射"
应为";"在'<'之前代币
最初我使用hash_map,但发现它只能在Visual C++中使用
感谢
GCC和MSVC以不同的方式定义TR1扩展,因为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)
这样,你只需要包含"一次"
相关文章:
- 在c++中访问int到类对象的映射时出错
- 将unique_ptrs从映射推送到矢量时出错
- 通过在迭代指针键映射上出错来捕获非确定性
- 不可复制的对象、映射和shared_ptr:复制构造函数中出错
- 使用映射<字符串,结构>类型的映射编译头文件时出错
- 初始化映射时出错
- 迭代映射以获取输入时出错
- 函数指针作为映射参数时出错?C++
- 声明矢量映射时出错
- 丢弃限定符 访问类中的映射向量时出错
- 在多重映射中将结构作为键传递时出错
- 使用 std::transform 打印映射<字符串、矢量<字符串*时出错> >
- C++中的无序映射出错
- 映射共享库时出错
- 编译 Caffe 时出错:ld:无法映射文件,errno=22
- 通过引用函数传递映射时出错
- 尝试存储映射插入的返回值时出错
- 遍历映射时出错<std::string, std::string>
- 使用std::string键从boost::无序::无序映射中恢复值时出错
- 初始化C++映射时出错