Thanks, Matthias. IMHO, this is one of the greatest things about boost::units, compile time unit safety. If your dimensions aren't correct then, there's no point in proceeding until they are. Runtimes are another question, though; but, for compile time, I like that about it.

On Wed, Nov 30, 2011 at 1:08 PM, Matthias Schabel <boost@schabel-family.org> wrote:
> I am using Boost 1.45 and trying to use Boost Units to map the types
> of astrodynamic equation variables. I am getting an error with the
> following equation. The error is saying that the lvalue type for
> k2_divded_by_semi_major is wrong.

This is the library doing what it is supposed to do : your equation is dimensionally incorrect...

> The questions I have are:
>
> Q1: Did I defined my system correctly? (System file is attached - types.hpp)
>
> Q2: How do I define ratio in the system? For example I have some
> constants that  define a conversion (1 earth radii = 6378 km).

Look at <boost/units/base_units/us/yard.hpp> for an example defining a new base unit of length with conversion to metric. You can look at the macro details to see how it is implemented.

> Q3: How do I define a variable type if its a fraction (e.g. radii / radian )?

typedef derived_dimension<length_base_dimension,1,plane_angle_base_dimension,-1>::type length_over_angle_dimension;
typedef unit<length_over_angle_dimension,my_system>     length_over_angle;


> sgp4::types::radii_t k2_divided_by_semi_major = m_k2 / pow<2> ( semi_major );
>
> The types of variables are:
>
> m_k2         sgp4::types::radii_t
> semi_major   sgp4::types::radian_t

You are trying to assign a [length]/[plane_angle^2] to a [length] which is clearly dimensionally incorrect. Depending on your perspective, one of the upsides/downsides of Boost.Units is that it requires that you be precise in formulation of equations...

Matthias


_______________________________________________
Boost-users mailing list
Boost-users@lists.boost.org
http://lists.boost.org/mailman/listinfo.cgi/boost-users