首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将boost::units::metric::hour_base_unit转换为boost::units::si::time?

如何将boost::units::metric::hour_base_unit转换为boost::units::si::time?
EN

Stack Overflow用户
提问于 2014-08-27 02:25:18
回答 1查看 961关注 0票数 2

我想让下面的代码正确编译:

代码语言:javascript
复制
#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,我得到了以下错误:

代码语言:javascript
复制
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();
                               ^

我遗漏了什么?

EN

回答 1

Stack Overflow用户

发布于 2014-08-27 02:57:05

快速浏览一下文档就会发现,unit类之间的大多数(如果不是全部)转换都是explicit (它是一个design decision)。因此,您可以使用直接初始化而不是复制初始化:

代码语言:javascript
复制
#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());
}

而且它是有效的。

this answer中解释了为什么这种方法有效,而您的尝试却不起作用。

希望这能有所帮助。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25512706

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档