G 错误.逐线理解

g++ error. Understanding line by line

本文关键字:错误      更新时间:2023-10-16

编译一个项目时,我遇到了一个声明范围错误。我理解错误并修复了,没什么大不了的。但是,编译器向我展示了与我无法完全理解的错误有关的十几个消息,因此这篇文章是为何。错误消息是:

/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

我的解释疑问来自第二个消息。在其中,我们再次有文件名,行和列为"错误"中的错误,并且在有建议的替代方案之后,通过指示文件列表来完成。

好吧,编译器想在这些文件中意味着什么?将其中的任何一个都包含在文件的标题中,而错误会解决我的声明问题吗?

这个问题可能很愚蠢,但我真的想确切知道编译器错误消息的每一行是什么意思。同样,这不是关于如何解决他宣布问题的问题。这是一个有关深入了解错误消息的问题!!

谢谢

当您调用函数(在您的情况下是rad2deg)时,会发生这种错误链,而编译器无法找到该函数(可能是错误的名称,错误的签名或丢失)。第一行告诉您问题,所有其他行都是编译器有关如何解决问题的建议(在这种情况下,您可以找到类似于Rad2deg的东西)。

RAD2DEG()是一个生活在命名空间mrpt::utils中的MRPT函数,因此要么添加A:

using namespace mrpt::utils;

或使用全合格名称:mrpt::utils::RAD2DEG()