在C ++的Eigen库中,如何解决:无效使用不完整类型const类Eigen :: MatrixSquareRootReturnValue <eigen :: matrix <float,-1,=“” -1 =“”>>'

时间:2018-07-10 01:17:38

标签: c++ matrix eigen

我正在使用C ++中的本征库来获取浮点方阵的平方根:

  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。

2 个答案:

答案 0 :(得分:3)

搜索documentation of that function表明它是Eigen不支持的一部分,并且(在顶部)

  

要使用此模块,请添加
  @IBOutlet weak var addview: UIView! override func viewDidLoad() { super.viewDidLoad() }
  在源文件的开头。

  

无效使用不完整的类型

表示编译器仅找到一个声明,但是在使用时需要定义。

答案 1 :(得分:0)

看起来像在寻找比P_old.sqrt()还要多的东西,您需要查看该对象的外观,它可能需要使用getter / setter或原子类型。

阅读有关forward declarations的信息,以了解为什么会出现此错误,并应解决该错误。