Eigen库使用总结

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判断;

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值