问题描述:
在复现https://github.com/hku-mars/FAST-LIVO2激光雷达视觉SLAM时,解决了下面这个问题。 /home/aq/ant/FAST-LIVO-project/Sophus/sophus/so2.cpp: In constructor ‘Sophus::SO2::SO2()’: /home/aq/ant/FAST-LIVO-project/Sophus/sophus/so2.cpp:32:26: error: lvalue required as left operand of assignment 32 | unit_complex_.real() = 1.; | ^~ /home/aq/ant/FAST-LIVO-project/Sophus/sophus/so2.cpp:33:26: error: lvalue required as left operand of assignment 33 | unit_complex_.imag() = 0.; | ^~ make[2]: *** [CMakeFiles/Sophus.dir/build.make:66:CMakeFiles/Sophus.dir/sophus/so2.cpp.o] 错误 1 make[2]: 离开目录“/home/aq/ant/FAST-LIVO-project/Sophus/build” make[1]: *** [CMakeFiles/Makefile2:91:CMakeFiles/Sophus.dir/all] 错误 2 make[1]: 离开目录“/home/aq/ant/FAST-LIVO-project/Sophus/build” make: *** [Makefile:144:all] 错误 2问题解答:
unit_complex_.real(1.) 是一个 setter 方法,它允许我们 设置 实部的值,而不是试图直接访问它。setter 方法通常用于修改对象的状态,并返回 void 或其他类型,表示它完成了设置操作。
setter 方法(例如 real(1.))可以直接在对象的内部状态上进行修改,因此它的调用会直接改变 unit_complex_ 的值。
这样,real(1.) 是通过 函数调用 来修改对象的内部数据,而不是通过直接赋值一个临时返回值来修改。
解决办法:
源代码
unit_complex_.real() = 1.;
unit_complex_.imag() = 0.;
修改后的代码是
unit_complex_.real(1.);
unit_complex_.imag(0.);