【发布时间】:2018-07-10 01:17:37
【问题描述】:
我在 C++ 中使用 Eigen 库来获取浮点方阵的平方根:
MatrixXf gPrime(QUAD_EKF_NUM_STATES, QUAD_EKF_NUM_STATES);
gPrime.setIdentity();
auto sqrtG = gPrime.sqrt();
当我编译它时,我得到了以下错误:
.../src/QuadEstimatorEKF.cpp:255:31: error: invalid use of incomplete type ‘const class Eigen::MatrixSquareRootReturnValue<Eigen::Matrix<float, -1, -1> >’
auto sqrtG = gPrime.sqrt()
^
In file included from /.../lib/Eigen/Core:346,
from /.../lib/Eigen/Dense:1,
from /.../src/QuadEstimatorEKF.h:11,
from /.../src/QuadEstimatorEKF.cpp:2:
/.../lib/Eigen/src/Core/util/ForwardDeclarations.h:286:34: note: declaration of ‘class Eigen::MatrixSquareRootReturnValue<Eigen::Matrix<float, -1, -1> >’
template<typename Derived> class MatrixSquareRootReturnValue;
^~~~~~~~~~~~~~~~~~~~~~~~~~~
“不完整类型”是什么意思,我应该怎么做才能解决它?
我正在使用 C++ 11 和 g++ 8.1.1。
【问题讨论】:
-
如果您想要矩阵平方根,请遵循 Darklighter 的回答,如果您想要系数平方根,则执行
gPrime.cwiseSqrt()或gPrime.array().sqrt()或sqrt(gPrime.array())。 (它们都是一样的,只是口味问题)。