Версия Boost Units : 1,45
Компилятор : Visual Studio 2008
Платформа : Windows 7
Ошибка : При компиляции следующего кода я получаю ошибку C2440 "инициализация": невозможно преобразовать из 'boost :: units :: amount' в 'boost :: units :: amount' с
[
Unit=boost::units::unit>,boost::units::detail::static_power_impl<0>::apply>::type,boost::units::hogogeneous_system>>>>,
Y = double
]
и
[
Unit=myproject::types::myproject_length
]
Конструктор для класса 'boost :: единиц :: количества' объявлен 'явным' с
[
Unit=myproject::types::myproject_length
]
Я не уверен, что здесь не так. Если я удаляю «radii_t result =» из следующего кода и закомментирую оператор ввода-вывода, я получаю ту же ошибку, что и ранее цитируемая выше.
Ниже приведен код, который я использовал. Я ценю ваше терпение, когда я изучаю Boost
Единицы измерения.
Q1: В чем причина этой ошибки? Что в выводе ошибки помогло
Вы должны это понять.
Q2: Даже если вышеуказанной ошибки не было, вы упомянули, что
провалить анализ измерений. Я думаю, что мы оба согласны, что тип будет
радиусы ^ -1. Как вы объявляете тип, возведенный в правильную степень?
Стивен
#include <boost/units/base_unit.hpp>
#include <boost/units/base_units/angle/radian.hpp>
#include <boost/units/io.hpp>
#include <boost/units/make_system.hpp>
#include <boost/units/physical_dimensions/length.hpp>
#include <boost/units/physical_dimensions/time.hpp>
#include <boost/units/static_constant.hpp>
#include <iostream>
namespace myproject {
namespace types {
//-------------------------------------
// Base dimensions
//-------------------------------------
struct length_base_dimension : public boost::units::base_dimension<length_base_dimension,1> {};
//-------------------------------------
// Dimensions
//-------------------------------------
struct radii_base_unit : public boost::units::base_unit<radii_base_unit, boost::units::length_dimension, 1>
{
static std::string name() { return("radii"); }
static std::string symbol() { return("r"); }
};
struct minute_base_unit : public boost::units::base_unit<minute_base_unit,boost::units::time_dimension,3>
{
static std::string name() { return ("minute"); }
static std::string symbol() { return ("min"); }
};
typedef boost::units::make_system<radii_base_unit,
minute_base_unit,
boost::units::angle::radian_base_unit >::type myproject_system_t;
typedef boost::units::unit<boost::units::length_dimension,myproject_system_t> myproject_length;
typedef boost::units::quantity<myproject_length, double> radii_t;
BOOST_UNITS_STATIC_CONSTANT(radii,myproject_length);
}
}
int main ( int, char** )
{
using namespace myproject::types;
radii_t val1 ( 5 * radii );
radii_t val2 ( 3 * radii );
radii_t result = 1.0 / ( val1 - val2 );
std::cout << result << std::endl;
return 0;
}