0

我正在使用 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
4

0 回答 0