【问题标题】:Error while including header file unordered_map包含头文件 unordered_map 时出错
【发布时间】:2017-12-19 06:43:41
【问题描述】:

当我在代码中包含 unordered_map 头文件时,会出现以下错误

"/usr/lib/gcc/armv7l-tizen-linux-gnueabi/6.2.1/include/c++/bits/hashtable.h:
In constructor 'std::_Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal,
_H1, _H2, _Hash, _RehashPolicy, _Traits>::_Hashtable(_InputIterator, 
_InputIterator, std::_Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, 
_H1, _H2, _Hash, _RehashPolicy, _Traits>::size_type, const _H1&, const _H2&,
const _Hash&, const _Equal&, const _ExtractKey&, const allocator_type&)':

 error: expected unqualified-id before '(' token
 [   29s]  #define max(a, b)    (((a) > (b)) ? (a) : (b))"

我确定没有语法错误。我认为宏和 std::unordered_map 之间存在冲突,但我不知道如何解决。在这里,我将 unordered_map 包含在另一个文件包含的文件中,类似地,定义宏 max 的头文件也包含在同一个文件中。

【问题讨论】:

  • A max 宏与标准库不兼容。那个宏是从哪里来的?例如。使用 Windows 编程在包含 &lt;windows.h&gt; 之前定义 NOMINMAX(也定义 STRICTUNICODEWIN32_LEAN_AND_MEAN)。

标签: c++ stl macros


【解决方案1】:

是的,您的宏 max()std::max() 函数之间存在冲突。
解决方案应该很简单:删除您的max() 宏并改用std::max()

【讨论】:

    【解决方案2】:

    找出 max() 定义的来源,如果它在您自己的代码中,您可能应该删除它,如果它在系统头文件中,请尝试移动该包含直到之后

    【讨论】:

      猜你喜欢
      • 2015-05-17
      • 2012-02-03
      • 2015-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多