Clang5.0:" __ hash_table"

时间:2017-10-05 08:10:09

标签: c++ clang llvm-clang

我们切换到C ++ 17,因此Clang ++ 5.0获得了它的功能。但我们遇到/usr/include/c++/v1/unordered_map调用/usr/include/c++/v1/__hash_table文件的问题。似乎Clang在此文件中提出了先前的声明。

对于您的信息,使用GCC-5.4可以很好地编译。这是输出错误:

In file included from /usr/include/c++/v1/unordered_map:369:
/usr/include/c++/v1/__hash_table:1132:43: error: conflicting types for '__hash_table<_Tp, _Hash,
      _Equal, _Alloc>'
__hash_table<_Tp, _Hash, _Equal, _Alloc>::__hash_table()
                                          ^
/usr/include/c++/v1/__hash_table:839:5: note: previous declaration is here
    __hash_table()
    ^
/usr/include/c++/v1/__hash_table:1200:43: error: conflicting types for '__hash_table<_Tp, _Hash,
      _Equal, _Alloc>'
__hash_table<_Tp, _Hash, _Equal, _Alloc>::__hash_table(__hash_table&& __u)
                                          ^
/usr/include/c++/v1/__hash_table:853:5: note: previous declaration is here
    __hash_table(__hash_table&& __u)
    ^

在文件中,我们只是#include <unordered_map>

我已经尝试了libstdc ++和libc ++,但是在使用GCC no时,两者都给出了同样的错误。

有没有人遇到过这个问题?以及如何解决?

1 个答案:

答案 0 :(得分:0)

我尝试用最小的例子重现错误,但我没有成功。

我仍然解决了这个错误。我认为这是与CMakeLists.txt中的导入订单相关的问题:

include_directories(BEFORE "/usr/include/c++/5")
include_directories(AFTER "/usr/include/x86_64-linux-gnu/c++/5/")

然后没有更多的编译错误。