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

时间:2012-05-11 15:23:34

标签: c++ c eclipse arduino

所以我在eclipse中构建一些Arduino代码,如Your Second Arduino Project中所述,但每次我使用Arduino库,例如Serial时,Eclipse都会强调我的函数名称,声称它们无法解析。但是,代码实际上是编译的,所以我有点不知道为什么Eclipse认为函数丢失了。如果有人知道如何解决这个问题,将不胜感激。先谢谢。

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

EDIT2:我发现了我的错误,结果我试图在C文件中使用一些C ++函数,并且eclipse不喜欢它;我改名为.cpp,所有的红色都消失了;)谢谢你的帮助!

9 个答案:

答案 0 :(得分:33)

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

CDT索引器(用于决定所有那些漂亮的下划线以及代码完成,F3声明跳转等来自哪个引擎)在很多情况下都不够智能来解析你的Makefile并知道在哪里寻找标题和来源。您需要手动告诉Eclipse该信息。

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

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

右键点击该项目,然后选择索引 - >重建

答案 1 :(得分:6)

对于初学者来说,下划线是什么颜色的?这有所不同,因为黄色意味着它是一个警告,红色意味着它是一个错误(关键,在大多数情况下不会建立)。

其次,您需要查看“问题”标签以查看是否存在实际错误。如果那里什么也没有,那么确实可以正确编译。

现在,回到最初的问题。根据您正在构建的项目类型,这种行为并不罕见。 Eclipse似乎在索引某些项目方面表现不佳。当您从命令行运行“make all”时(这实际上是Eclipse在构建期间所做的那样),它可能会解析您的所有代码并构建它。

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

答案 2 :(得分:3)

以下解决方案对我有用: 单击右键单击您的项目。然后: 属性 - > C / C ++一般 - >路径和符号 - >符号 - > GNU C ++。 如果你有这个问题,几乎可以肯定没有任何符号。添加符号“__cplusplus”,其值为“201402L” 在这之后: 右键单击 项目 - >指数 - >重建 你完成了。

答案 3 :(得分:1)

我在

中添加了文件夹

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

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

答案 4 :(得分:1)

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

答案 5 :(得分:0)

我遇到了同样的问题。 索引 - &gt;重建没有帮助。 当我在 main.cpp 中添加了行#include <avr/iom1280.h>并创建了索引 - &gt;重建强调消失。 然后我删除了行#include <avr/iom1280.h>并仍然没有inderlines进行投影。

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

答案 6 :(得分:0)

Eclipse与C ++一样不能像使用Java那样工作,但是一旦你按下&#34; Rebuild&#34;它就应该警告你。在菜单栏中。

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

答案 7 :(得分:0)

在我的情况下,问题是由于在编译方言下的项目属性的语言标准字段中添加了“ -std = c ++ 17”标志。此后,构建传递错误,但程序运行正常。因此,Index> Rebuild的技巧解决了所有问题。

答案 8 :(得分:0)

如果您更改了配置(例如,使用notepad ++在* .cproject文件中进行编辑),则以下选项会有所帮助。 构建配置-> 清理所有,然后索引-> 重建