ブースト ユニットのバージョン: 1.45
コンパイラ: Visual Studio 2008
プラットフォーム: Windows 7
エラー: 次のコードをコンパイルすると、エラー C2440 "initializing" : cannot convert from 'boost::units::quantity' to 'boost::units::quantity' が発生します
[
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::units::quantity' のコンストラクターは 'explicit' で宣言されています
[
Unit=myproject::types::myproject_length
]
ここで何が問題なのかわかりません。次のコードから "radii_t result =" を削除し、IO ステートメントをコメント アウトすると、上記で引用したのと同じエラーが発生します。以下は私が使用したコードです。ブースト ユニットを習得するまで、しばらくお待ちください。
Q1: このエラーの理由は何ですか? エラー出力の内容は、それを理解するのに役立ちました。
Q2: 上記のエラーが発生しなくても、寸法解析に失敗するとおっしゃいました。タイプがradii^-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;
}