在Eigen上查找失败的静态断言的来源

时间:2015-03-16 21:27:48

标签: c++ static assert eigen

我正在尝试编译一个与Eigen有一些依赖关系的大型代码库。这样做,我收到以下错误:error C2338: THE_BRACKET_OPERATOR_IS_ONLY_FOR_VECTORS__USE_THE_PARENTHESIS_OPERATOR_INSTEAD来自此处:

//    Eigen\src\Core\DenseCoeffsBase.h


/** \returns a reference to the coefficient at given index.
  *
  * This method is allowed only for vector expressions, and for matrix expressions having the LinearAccessBit.
  *
  * \sa operator[](Index) const, operator()(Index,Index), x(), y(), z(), w()
  */

EIGEN_STRONG_INLINE Scalar&
operator[](Index index)
{
  #ifndef EIGEN2_SUPPORT
  EIGEN_STATIC_ASSERT(Derived::IsVectorAtCompileTime,
                      THE_BRACKET_OPERATOR_IS_ONLY_FOR_VECTORS__USE_THE_PARENTHESIS_OPERATOR_INSTEAD)
  #endif
  eigen_assert(index >= 0 && index < size());
  return derived().coeffRef(index);
}

由于Eigen依赖关系遍及代码,如何找到触发此错误的行? (显然,有一行代码使用[]某处来访问特征矩阵,这是我正在寻找的行。

1 个答案:

答案 0 :(得分:0)

是的,我也遇到过类似的问题。我将矩阵定义为:

Eigen::MatrixXf minor2x2 (2,2)。当矩阵minor2x2被初始化时:

minor2x2[0] = 1.0f;
minor2x2[1] = 1.0f;
minor2x2[2] = 1.0f;
minor2x2[3] = 1.0f;

触发了同样的错误。该问题的解决方案是将minor2x2[i]替换为minor2x2(i)。我认为找Eigen::Matrix也许有帮助。