Only the last line fails?  The only line of that which should compile
is the #include.

conversion_factor return the conversion between two different units.
kilometer in your example is not a unit.

#include <boost/units/systems/si/prefixes.hpp>

double mile_to_km = conversion_factor(mile(), si::kilo*si::meter);

#include <iostream>

#include <boost/units/cmath.hpp>
#include <boost/units/conversion.hpp>
#include <boost/units/io.hpp>
#include <boost/units/quantity.hpp>
#include <boost/units/systems/si.hpp>
#include <boost/units/systems/si/prefixes.hpp>

#include <boost/units/base_units/us/mile.hpp>

int main()
{
    using namespace boost;
    using namespace boost::units;
    using namespace boost::units::si;


    typedef meter_base_unit::unit_type                                                  meter_type;
    typedef scaled_base_unit<meter_base_unit,scale<10,static_rational<3> > >::unit_type kilometer_type;
    typedef us::mile_base_unit::unit_type                                               mile_type;


    const kilometer_type    kilometer;
    const mile_type         mile;

    double miles_to_kilometers = conversion_factor(mile,kilometer);
    double kilometers_to_miles = conversion_factor(kilometer,mile);


    std::cout << "1 " << mile << " = " << miles_to_kilometers << " " << kilo*meters << std::endl;
    std::cout << "1 " << kilometer << " = " << kilometers_to_miles << " " << mile << std::endl;


    quantity<si::length> q1(1.0*mile);
    quantity<si::length> q2(1.0*kilo*mile);
    quantity<meter_type> q3(1.0*mile);
    quantity<meter_type> q4(1.0*kilo*mile);
    quantity<mile_type>  q5(1.0*kilometer);
    quantity<mile_type>  q6(1.0*kilo*meter);


    std::cout << q1 << std::endl
      << q2 << std::endl
      << q3 << std::endl
      << q4 << std::endl
      << q5 << std::endl
      << q6 << std::endl;

 

    return 0;
}