命名空间“std”中的错误“underlying_type_t”未命名 example.cpp 来自项目OSRM的模板类



我尝试执行 Project-OSRM 的 examle.cpp 文件。我做了以下步骤:

  • 从源代码构建 OSRM,如此处所述
  • 在新终端中:CD OSRM 后端/示例
  • 在终端中:CMAKE ..
  • 在终端中:CMAKE --Build 。
  • 在终端中:sudo cmake --build . --目标安装
  • 将映射承包商引擎提取器分区存储util 从/usr/local/include/osrm 移动到/usr/local/include(否则错误映射不在/usr/local/include 中(
  • 在终端中:G++ -std=C++11 示例.cpp -o 示例

但是我得到错误

‘underlying_type_t’ in namespace ‘std’ does not name a template type
     static_cast<std::underlying_type_t<RouteParameters::AnnotationsType>>

有没有人知道我做错了什么或出了什么问题以及如何解决这个问题?

错误信息

In file included from /usr/local/include/engine/api/match_parameters.hpp:31:0,
                 from /usr/local/include/osrm/match_parameters.hpp:31,
                 from example.cpp:1:
/usr/local/include/engine/api/route_parameters.hpp: In function ‘bool osrm::engine::api::operator&(osrm::engine::api::RouteParameters::AnnotationsType, osrm::engine::api::RouteParameters::AnnotationsType)’:
/usr/local/include/engine/api/route_parameters.hpp:144:26: error: ‘underlying_type_t’ in namespace ‘std’ does not name a template type
         static_cast<std::underlying_type_t<RouteParameters::AnnotationsType>>(l
                          ^
/usr/local/include/engine/api/route_parameters.hpp:144:43: error: expected ‘>’ before ‘<’ token
         static_cast<std::underlying_type_t<RouteParameters::AnnotationsType>>(l
                                           ^
/usr/local/include/engine/api/route_parameters.hpp:144:43: error: expected ‘(’ before ‘<’ token
/usr/local/include/engine/api/route_parameters.hpp:144:43: error: expected primary-expression before ‘<’ token
/usr/local/include/engine/api/route_parameters.hpp:144:76: error: expected primary-expression before ‘>>’ token
    static_cast<std::underlying_type_t<RouteParameters::AnnotationsType>>(lhs) &
                                                                       ^
/usr/local/include/engine/api/route_parameters.hpp:145:26: error: ‘underlying_type_t’ in namespace ‘std’ does not name a template type
         static_cast<std::underlying_type_t<RouteParameters::AnnotationsType>>(r
                          ^
/usr/local/include/engine/api/route_parameters.hpp:145:43: error: expected ‘>’ before ‘<’ token
         static_cast<std::underlying_type_t<RouteParameters::AnnotationsType>>(r
                                           ^
/usr/local/include/engine/api/route_parameters.hpp:145:43: error: expected ‘(’ before ‘<’ token
/usr/local/include/engine/api/route_parameters.hpp:145:43: error: expected primary-expression before ‘<’ token
/usr/local/include/engine/api/route_parameters.hpp:145:76: error: expected primary-expression before ‘>>’ token
    static_cast<std::underlying_type_t<RouteParameters::AnnotationsType>>(rhs));
                                                                       ^
/usr/local/include/engine/api/route_parameters.hpp:145:84: error: expected ‘)’ before ‘;’ token
    static_cast<std::underlying_type_t<RouteParameters::AnnotationsType>>(rhs));
                                                                               ^
/usr/local/include/engine/api/route_parameters.hpp:145:84: error: expected ‘)’ before ‘;’ token
/usr/local/include/engine/api/route_parameters.hpp: In function ‘osrm::engine::api::RouteParameters::AnnotationsType osrm::engine::api::operator|(osrm::engine::api::RouteParameters::AnnotationsType, osrm::engine::api::RouteParameters::AnnotationsType)’:
/usr/local/include/engine/api/route_parameters.hpp:152:26: error: ‘underlying_type_t’ in namespace ‘std’ does not name a template type
         static_cast<std::underlying_type_t<RouteParameters::AnnotationsType>>(l
                          ^
/usr/local/include/engine/api/route_parameters.hpp:152:43: error: expected ‘>’ before ‘<’ token
         static_cast<std::underlying_type_t<RouteParameters::AnnotationsType>>(l
                                           ^
/usr/local/include/engine/api/route_parameters.hpp:152:43: error: expected ‘(’ before ‘<’ token
/usr/local/include/engine/api/route_parameters.hpp:152:43: error: expected primary-expression before ‘<’ token
/usr/local/include/engine/api/route_parameters.hpp:152:76: error: expected primary-expression before ‘>>’ token
    static_cast<std::underlying_type_t<RouteParameters::AnnotationsType>>(lhs) |
                                                                       ^
/usr/local/include/engine/api/route_parameters.hpp:153:26: error: ‘underlying_type_t’ in namespace ‘std’ does not name a template type
         static_cast<std::underlying_type_t<RouteParameters::AnnotationsType>>(r
                          ^
/usr/local/include/engine/api/route_parameters.hpp:153:43: error: expected ‘>’ before ‘<’ token
         static_cast<std::underlying_type_t<RouteParameters::AnnotationsType>>(r
                                           ^
/usr/local/include/engine/api/route_parameters.hpp:153:43: error: expected ‘(’ before ‘<’ token
/usr/local/include/engine/api/route_parameters.hpp:153:43: error: expected primary-expression before ‘<’ token
/usr/local/include/engine/api/route_parameters.hpp:153:76: error: expected primary-expression before ‘>>’ token
    static_cast<std::underlying_type_t<RouteParameters::AnnotationsType>>(rhs));
                                                                       ^
/usr/local/include/engine/api/route_parameters.hpp:153:84: error: expected ‘)’ before ‘;’ token
    static_cast<std::underlying_type_t<RouteParameters::AnnotationsType>>(rhs));
                                                                               ^
/usr/local/include/engine/api/route_parameters.hpp:153:84: error: expected ‘)’ before ‘;’ token

underlying_type_t需要C++14。为了能够使用它,请将-std=c++14传递给您的编译器。

不要忘记

#include <type_traits>

此缺少的指令也会导致相同的(令人困惑的(错误消息。

最新更新