在编译一个项目时,我面临一个声明范围错误。我理解错误并修复它,这不是什么大不了的事。但是,编译器向我展示了十几个与错误相关的其他消息,我无法完全理解,所以为什么这篇文章。错误消息是:
/home/vero/ran/catkin_ws_full/src/ransac_project/src/control.cpp: In static member function ‘static double Control::LineTracking(std::vector<double>, double, double, double, double, double, double, double)’: /home/vero/ran/catkin_ws_full/src/ransac_project/src/control.cpp:88:42: error: ‘RAD2DEG’ was not declared in this scope head = RAD2DEG(atan2(trans[1],trans[0]));
^
/home/vero/ran/catkin_ws_full/src/ransac_project/src/control.cpp:88:42: note: suggested alternative:
In file included from /usr/include/mrpt/base/include/mrpt/utils/utils_defs.h:29:0,
from /usr/include/mrpt/base/include/mrpt/math/lightweight_geom_data.h:12,
from /usr/include/mrpt/base/include/mrpt/poses/CPoseOrPoint.h:13,
from /usr/include/mrpt/base/include/mrpt/poses/CPose.h:12,
from /usr/include/mrpt/base/include/mrpt/poses/CPose3D.h:12,
from /usr/include/mrpt/opengl/include/mrpt/opengl/CRenderizable.h:15,
from /usr/include/mrpt/opengl/include/mrpt/opengl/COpenGLScene.h:12,
from /usr/include/mrpt/gui/include/mrpt/gui/CDisplayWindow3D.h:13,
from /usr/include/mrpt/gui/include/mrpt/gui.h:13,
from /home/vero/ran/catkin_ws_full/src/ransac_project/include/ransac_project/control.hpp:5,
from /home/vero/ran/catkin_ws_full/src/ransac_project/src/control.cpp:1: /usr/include/mrpt/base/include/mrpt/utils/bits.h:83:22: note: ‘mrpt::utils::RAD2DEG’ inline long double RAD2DEG(const long double x) { return x*180.0/M_PIl; }
^ make[2]: *** [ransac_project/CMakeFiles/ransac_project.dir/src/control.cpp.o] Error 1 make[1]: *** [ransac_project/CMakeFiles/ransac_project.dir/all] Error 2 make: *** [all] Error 2 Invoking "make -j4 -l4" failed
我的解释怀疑来自第二块消息。在其中,我们再次使用文件名,行和列,在文件中识别出错误,并且在我们有一个建议替代之后,通过指示文件列表来完成。
那么,编译器想要对这些文件意味着什么?在错误的文件的标题中包含它们中的任何一个将解决我的声明问题?
问题可能很愚蠢,但我真的想知道编译器错误消息的每一行究竟是什么意思。同样,这不是关于如何解决他的声明问题的问题。这是一个深入理解错误消息的问题!!!
谢谢
答案 0 :(得分:0)
当您调用编译器无法找到的函数(在您的情况下为RAD2DEG)时会发生此错误链(可能是错误的名称,错误的签名或缺少包含)。第一行告诉你问题,所有其他行都是编译器关于如何解决问题的建议(在这种情况下你可以找到类似于RAD2DEG的东西)。
答案 1 :(得分:0)
RAD2DEG()
是一个MRPT函数,它位于命名空间mrpt::utils
中,所以要么添加一个:
using namespace mrpt::utils;
或使用完全限定名称:mrpt::utils::RAD2DEG()
。