1. 对向量Vector索引时,可以用方括号[] ; 对矩阵Matrix元素索引时,只能用圆括号()
对矩阵元素索引,用方括号[],会报以下错误:
THE BRACKET OPERATOR IS ONLY FOR VECTORS ,USE THE PARENTHESIS OPERATOR INSTEAD
方括号运算符 仅用于向量,请改用 圆括号运算符
2.
- Eigen的使用时遇到error C2338: INVALID_MATRIX_PRODUCT问题解决
这个应该是Eigen使用时,矩阵的使用越界了,比如使用了4*3的矩阵,但是给它赋值的行或列超过了4*3。
检查错误然后将超出存储空间的代码修改就可以;
- static assertion failed: YOU_MIXED_MATRICES_OF_DIFFERENT_SIZES
对不同大小的矩阵进行赋值,比如将3x3类型的矩阵赋值给4x4类型的矩阵;
3. VScode中用Eigen库,cout << 输出矩阵时,有时会有如下报错,有时则显示正常,原因是std和Eigen中对<<运算符都有定义,编译器不知使用哪一个,报错:more than one operator,但在VS中不会。
more than one operator "<<" matches these operands:
- function template "std::ostream &Eigen::operator<<(std::ostream &s, const Eigen::DenseBase<Derived> &m)"
- function template "std::ostream &operator<<(std::ostream &s, const Eigen::DenseBase<Derived> &m)"
-- operand types are: std::basic_ostream<char, std::char_traits<char>> << Vector4f
解决:可尝试调节头文件include顺序, 或者, Eigen和std只using namespace 一个,(ps:有待问题再出现时进一步测试)
4. 出现Segmentation fault,基本都是由于指针越界操作引起的
- 因此要检查出现错误的代码段,可能引起指针越界的代码逻辑
- 有些指针操作是“隐式的”,如Matrix的block()、col()等成员函数,在其内部会涉及到指针操作或对索引和大小进行assert判断;