"неполный тип" при использовании модулей C ++ unit :: compose - PullRequest
0 голосов
/ 01 апреля 2012

Я использую библиотеку C ++ Units от Calum Grant http://calumgrant.net/units/ для управления значениями, представляющими длины или скорости.

Теперь мне нужна единица, не указанная этой библиотекой, а это футы в минуту. В соответствии с http://calumgrant.net/units/units.html вы можете создавать новые юниты следующим образом:

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);

Я получаю следующую ошибку компиляции (используя gcc 4.2.1 на Mac)

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 ]

1 голос
/ 02 апреля 2012

Ну, я только что нашел проблему. Существуют «единицы» и существуют «значения» этих единиц. Таким образом, правильное определение выглядит следующим образом:

namespace units {

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

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

}
0 голосов
/ 01 апреля 2012

Попробуйте футов в секунду.Посмотрите, если это работает, то репост

...