我正在尝试编译一个与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依赖关系遍及代码,如何找到触发此错误的行? (显然,有一行代码使用[]
,某处来访问特征矩阵,这是我正在寻找的行。
答案 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
也许有帮助。