Eclipse C/C++ 显示错误但编译

Eclipse C/C++ Shows Errors but Compiles?

本文关键字:错误 编译 显示 C++ Eclipse      更新时间:2023-10-16

所以我在 eclipse 中构建了一些 Arduino 代码,如您的第二个 Arduino 项目中所述,但每次我使用 Arduino 库(例如 Serial 时,Eclipse 都会在我的函数名称下划线,声称它们无法解析。 但是,代码实际上是编译的,所以我有点不明白为什么Eclipse认为缺少这些函数。 如果有人对如何解决这个问题有任何想法,将不胜感激。 事先谢谢。

编辑:我应该更具体,Eclipse强调了Arduino库中的方法。 因此,如果我使用 Serial.println("hello"); ,它会强调println()并声称无法解决。 然后它编译得很好,该方法在上传到 arduino 板时有效。

EDIT2:我发现了我的错误,原来我试图在 C 文件中使用一些C++函数,而 eclipse 不喜欢它;我重命名为.cpp,所有的红色都消失了;) 感谢您的帮助!

Eclipse 可能会也可能不会从构建设置中提取要索引的路径,具体取决于配置。最有可能的是,它不是...它正在正确构建,因为您的构建设置很好,并且您可能可以手动构建。

CDT 索引器(它是决定所有这些漂亮的下划线以及代码完成、F3 声明跳转等来自何处的引擎)在很多情况下不够智能,无法解析您的 Makefile 并知道在哪里查找标头和源代码。您需要手动告知 Eclipse 该信息。

转到项目属性 -> C/C++ 常规 ->路径和符号

您需要投入的工作量可能会有很大差异,具体取决于您的环境。如果这个外部库是唯一让你头疼的东西,那么你可能只需要添加该库的路径并重新索引:

右键单击项目并选择"索引 ->重新生成

"

对于初学者来说,下划线是什么颜色?这是有区别的,因为黄色表示它是一个警告,红色表示它是一个错误(严重,在大多数情况下不会构建)。

其次,您需要查看"问题"选项卡以查看是否存在实际错误。如果那里什么都没有,那么它确实编译正确。

现在,回到最初的问题。根据您正在构建的项目类型,这种类型的行为并不少见。Eclipse似乎在索引某些项目方面做得很差。当你从命令行运行"make all"时(这实际上是 Eclipse 在构建过程中所做的),它可能会解析所有代码并构建它。

但是,Eclipse 使用不同的、单独的工具来索引所有源代码并解析变量/函数定义和声明。这实际上是左手不知道右手在做什么的情况。

下面的解决方案对我有用:使用右键单击单击到您的项目。然后:属性 -> C/C++ 常规 -> 路径和符号 ->符号 -> GNU C++。几乎可以肯定的是,如果你有这个问题,根本没有符号。添加符号"__cplusplus",值为"201402L"在此之后:右键单击项目 -> 索引 -> 重建大功告成。

我已将文件夹包含在

项目属性 -> C/C++ 常规 ->路径和符号 ->包括

当我删除它们时,红色下划线消失了,即构建和 IDE 同步。

在解析符号时,CDT 索引器似乎会考虑所有头文件,而不管哪些头文件实际包含在编译单元中。Eclipse Bugzilla有一个相应的错误报告:https://bugs.eclipse.org/bugs/show_bug.cgi?id=439553

就我而言,问题是由于在编译方言下项目属性的语言标准字段中添加了"-std=c++17"标志。之后,构建通过错误,但程序运行良好。因此,索引>重建的技巧解决了一切。

如果您在配置中更改了某些内容(例如,使用记事本++在 *.cproject 文件中编辑),以下选项会有所帮助。构建配置 --> 全部清理,然后编制索引 -->重建

我遇到了同样的问题。索引 -> 重建没有帮助。当我在 main 中添加行#include <avr/iom1280.h>.cpp并使索引 ->重建下划线消失。然后我删除了第 #include <avr/iom1280.h> 行,并且项目仍然没有插入线。

iom1280.h替换为控制器的名称。查看"avr\include\avr\"文件夹中的可用名称

Eclipse在C++上不像在Java上那样好,但是一旦你在菜单栏中按"重建",它应该会警告你一些问题。

试试吧,看看它是否能解决你的问题。