我正在使用 Boost.QVM 并boost::multiprecision::cpp_dec_float_50
作为我的四元数的标量。
我尝试了我的程序double
而不是boost::multiprecision::cpp_dec_float_50
它并且它有效,所以我相信这是问题的原因。
#include <bits/stdc++.h>
#include <boost/numeric/odeint.hpp>
#include <boost/multiprecision/cpp_dec_float.hpp>
#include <boost/qvm.hpp>
using namespace std;
namespace boost { namespace qvm {
template <> struct is_scalar<boost::multiprecision::cpp_dec_float_50> { static bool const value=true; };
}
}
typedef boost::multiprecision::cpp_dec_float_50 value_type;
typedef boost::qvm::mat<value_type, 3, 3> matrix;
typedef boost::qvm::vec<value_type,3> triple;
typedef boost::qvm::quat<value_type> quaternion;
int main()
{
quaternion q = {1,1,1,1};
boost::qvm::normalize(q);
}
我得到的错误是:
/usr/bin/ld: /tmp/ccGMS28g.o: in function `boost::qvm::enable_if_c<boost::qvm::is_quat<boost::qvm::quat<boost::multiprecision::number<boost::multiprecision::backends::cpp_dec_float<50u, int, void>, (boost::multiprecision::expression_template_option)1> > >::value, void>::type boost::qvm::normalize<boost::qvm::quat<boost::multiprecision::number<boost::multiprecision::backends::cpp_dec_float<50u, int, void>, (boost::multiprecision::expression_template_option)1> > >(boost::qvm::quat<boost::multiprecision::number<boost::multiprecision::backends::cpp_dec_float<50u, int, void>, (boost::multiprecision::expression_template_option)1> >&)':
test2.cpp:(.text._ZN5boost3qvm9normalizeINS0_4quatINS_14multiprecision6numberINS3_8backends13cpp_dec_floatILj50EivEELNS3_26expression_template_optionE1EEEEEEENS0_11enable_if_cIXsrNS0_7is_quatIT_EE5valueEvE4typeERSD_[_ZN5boost3qvm9normalizeINS0_4quatINS_14multiprecision6numberINS3_8backends13cpp_dec_floatILj50EivEELNS3_26expression_template_optionE1EEEEEEENS0_11enable_if_cIXsrNS0_7is_quatIT_EE5valueEvE4typeERSD_]+0x25e): undefined reference to `boost::multiprecision::number<boost::multiprecision::backends::cpp_dec_float<50u, int, void>, (boost::multiprecision::expression_template_option)1> boost::qvm::sqrt<boost::multiprecision::number<boost::multiprecision::backends::cpp_dec_float<50u, int, void>, (boost::multiprecision::expression_template_option)1> >(boost::multiprecision::number<boost::multiprecision::backends::cpp_dec_float<50u, int, void>, (boost::multiprecision::expression_template_option)1>)'
collect2: error: ld returned 1 exit status