【问题标题】:Why do I get a compilation error when using boost::units::make_scaled_unit with liter_base_unit?为什么将 boost::units::make_scaled_unit 与 liter_base_unit 一起使用时会出现编译错误?
【发布时间】:2013-10-08 23:00:16
【问题描述】:

我想使用 Boost.Units 来表示以克每毫升表示的数量。我正在尝试定义单位“毫升”。如果我写

typedef boost::units::make_scaled_unit<
        boost::units::si::volume,
        boost::units::scale<10, boost::units::static_rational<-3> >
>::type liter;

typedef boost::units::make_scaled_unit<
        liter,
        boost::units::scale<10, boost::units::static_rational<-3> >
>::type milliliter;

代码编译得很好,但是如果我用boost::units::metric::liter_base_unit 替换我自己的liter,那么milliliter 的定义将无法编译,并且在struct boost::units::make_scaled_unit 中没有名为'type' 的类型“ 错误。 你能解释一下为什么吗? make_scaled_unit 中的单位可以作为基本单位还是我需要从boost::units::metric::liter_base_unit 制作派生单位?

【问题讨论】:

    标签: c++ boost compiler-errors units-of-measurement


    【解决方案1】:

    我找到了解决方案。正如我所建议的,问题是make_scaled_unit 中的单位必须是单位类型,而不是基本单位。通过将boost::units::metric::liter_base_unit 替换为boost::units::metric::liter_base_unit::unit_type,它可以工作。

    代码变成:

    typedef boost::units::make_scaled_unit<
            boost::units::metric::liter_base_unit::unit_type,
            boost::units::scale<10, boost::units::static_rational<-3> >
    >::type milliliter;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-10
      • 2014-10-11
      • 2013-08-14
      相关资源
      最近更新 更多