使用C ++单位单位的“不完整类型”:: compose

时间:2012-03-31 20:14:15

标签: c++ templates units-of-measurement

我正在使用Calum Grant http://calumgrant.net/units/的C ++ Units库来管理表示长度或速度的值。

现在我需要一个未由此库指定的单位,即每分钟英尺。根据{{​​3}},你可以制作这样的新单位:

typedef units::compose< units::units::m, units::pow<units::units::s, -1> > meters_per_second;

但这个例子不起作用。如果我指定

typedef units::compose< units::units::foot, units::pow<units::units::minute, -1> > 
feet_per_minute;
feet_per_minute vertical_speed(12);

我收到以下编译错误(在Mac上使用gcc 4.2.1)

error: variable 'feet_per_minute vertical_speed' has initializer but incomplete type
使用clang 3

进行编译时出现错误

error: implicit instantiation of undefined template 'units::compose<units::scale<units::scale<units::scale<units::units::m, 100, 1>, 100, 254>, 1, 12>, units::pow<units::scale<units::units::s, 1, 60>, -1, 1> >'

缺少什么?

2 个答案:

答案 0 :(得分:1)

好吧,我刚发现了这个问题。存在“单位”并且存在这些单位的“价值”。所以正确的定义如下:

namespace units {

namespace units {
     typedef compose< foot, pow<minute, -1> > fpm;
}

namespace values {
    typedef value<double, units::fpm> fpm;
}

}

答案 1 :(得分:0)

每秒尝试英尺。看看是否有效,然后重新发布