如何将boost::units:metric::hour_base_unit转换为boost::units:si::ti
How to convert boost::units::metric::hour_base_unit to boost::units::si::time?
我想正确编译以下代码:
#include <boost/units/systems/si.hpp>
#include <boost/units/base_units/metric/hour.hpp>
int main(int argc, char **argv) {
using namespace boost::units;
quantity<si::time> t = 2.0 * metric::hour_base_unit::unit_type();
}
使用gcc,我得到以下错误:
error: conversion from ‘boost::units::multiply_typeof_helper<double, boost::units::unit<boost::units::list<boost::units::dim<boost::units::time_base_dimension, boost::units::static_rational<1l> >, boost::units::dimensionless_type>, boost::units::heterogeneous_system<boost::units::heterogeneous_system_impl<boost::units::list<boost::units::heterogeneous_system_dim<boost::units::scaled_base_unit<boost::units::si::second_base_unit, boost::units::scale<60l, boost::units::static_rational<2l> > >, boost::units::static_rational<1l> >, boost::units::dimensionless_type>, boost::units::list<boost::units::dim<boost::units::time_base_dimension, boost::units::static_rational<1l> >, boost::units::dimensionless_type>, boost::units::dimensionless_type> >, void> >::type {aka boost::units::quantity<boost::units::unit<boost::units::list<boost::units::dim<boost::units::time_base_dimension, boost::units::static_rational<1l> >, boost::units::dimensionless_type>, boost::units::heterogeneous_system<boost::units::heterogeneous_system_impl<boost::units::list<boost::units::heterogeneous_system_dim<boost::units::scaled_base_unit<boost::units::si::second_base_unit, boost::units::scale<60l, boost::units::static_rational<2l> > >, boost::units::static_rational<1l> >, boost::units::dimensionless_type>, boost::units::list<boost::units::dim<boost::units::time_base_dimension, boost::units::static_rational<1l> >, boost::units::dimensionless_type>, boost::units::dimensionless_type> >, void>, double>}’ to non-scalar type ‘boost::units::quantity<boost::units::unit<boost::units::list<boost::units::dim<boost::units::time_base_dimension, boost::units::static_rational<1l> >, boost::units::dimensionless_type>, boost::units::homogeneous_system<boost::units::list<boost::units::si::meter_base_unit, boost::units::list<boost::units::scaled_base_unit<boost::units::cgs::gram_base_unit, boost::units::scale<10l, boost::units::static_rational<3l> > >, boost::units::list<boost::units::si::second_base_unit, boost::units::list<boost::units::si::ampere_base_unit, boost::units::list<boost::units::si::kelvin_base_unit, boost::units::list<boost::units::si::mole_base_unit, boost::units::list<boost::units::si::candela_base_unit, boost::units::list<boost::units::angle::radian_base_unit, boost::units::list<boost::units::angle::steradian_base_unit, boost::units::dimensionless_type> > > > > > > > > > > >’ requested
quantity<si::time> t = 2.0 * metric::hour_base_unit::unit_type();
^
我错过了什么?
快速浏览文档意味着unit
类之间的大多数(如果不是全部的话)转换都是explicit
(这是一个设计决策)。因此,您可以使用直接初始化而不是复制初始化:
#include <boost/units/systems/si.hpp>
#include <boost/units/base_units/metric/hour.hpp>
int main(int argc, char **argv) {
using namespace boost::units;
quantity<si::time,double> xxxxxx (2.0 * metric::hour_base_unit::unit_type());
}
它是有效的。
这个答案解释了为什么在你的尝试没有成功的情况下这样做是有效的。
希望能有所帮助。
相关文章:
- 理解boost::asio-async_read在无需读取内容时的行为
- boost::进程间消息队列引发错误
- 如何运行位于boost/libs/python/example/tutorial目录中的hello.cpp和Jamfil
- cmake如何在fedora工作站中找到boost静态库包
- CMake项目Boost库错误:Boost/config/compiler/gcc.hpp:165:10:致命错误:cs
- Boost Graph Library,修复节点大小
- 什么是"#include <boost/functional/hash.hpp> "?
- 是通过BOOST.UNITS支持尺寸分析的Boost Odeint
- Eigen norm() with Boost.Units
- boost.units中单位的转换因子
- 将printf与boost::units::quantity值一起使用
- 将标量乘以boost.units.quantity(自动类型转换问题?)
- 带有boost::units::quantity的boost::lexical_cast不再编译
- 使用Boost::units在两个量之间转换的最简单方法
- std::chrono & Boost.Units
- 使用 Boost.Units 定义百分比
- 为什么在将 boost::units::make_scaled_unit 与 liter_base_unit 一起使用时
- 如何将boost::units:metric::hour_base_unit转换为boost::units:si::ti
- 结合线性代数库与Boost::Units
- 如何使用boost::units添加自己的基本单位和转换