C++ eclipsec/C++;显示错误但编译?

C++ eclipsec/C++;显示错误但编译?,c++,c,eclipse,arduino,C++,C,Eclipse,Arduino,因此,我在eclipse中构建了一些Arduino代码,如中所述,但每次我使用Arduino库,例如Serial,eclipse都会在我的函数名下面加下划线,声称它们无法解析。然而,代码实际上是编译的,所以我有点不明白为什么Eclipse认为函数丢失了。如果有人对如何解决这个问题有任何想法,我们将不胜感激。先谢谢你 编辑:我应该说得更具体一些,Eclipse强调了Arduino库中的方法。所以如果我使用Serial.println(“hello”),它在println()下加下划线,并声称无法解

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

编辑:我应该说得更具体一些,Eclipse强调了Arduino库中的方法。所以如果我使用
Serial.println(“hello”),它在
println()下加下划线
,并声称无法解决该问题。然后,它编译得很好,当上传到arduino板时,该方法可以工作


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

首先,下划线是什么颜色?这会产生不同,因为黄色表示警告,红色表示错误(严重,在大多数情况下不会生成)

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

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


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

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

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

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

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


右键单击项目并选择索引->重建

我在中包含文件夹

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

当我删除这些内容时,红色下划线消失了,即构建和IDE同步。

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


iom1280.h
替换为控制器的名称。查看<强> >“avr \包含\ avr \ < /强>文件夹中可用的名称

在解析符号时,CDT索引器似乎考虑所有的头文件,而不管哪些头文件实际上包含在编译单元中。Eclipse BugZIL:有一个相应的bug报告:

Eclipse与C++ java一样不好用,但是一旦在菜单栏中按下“重建”,它就应该警告您。


尝试一下,看看它是否解决了您的问题。

下面的解决方案对我很有效: 使用右键单击以打开项目。然后:<强>属性-> C/C++ +通用>路径和符号->符号-> GNUC++ + <强> 如果你有这个问题,几乎可以肯定根本没有符号。添加带有值“201402L”的符号“uuu cplusplus” 在此之后: 右键单击项目->索引->重建
您完成了。

在我的例子中,问题是由于在编译方言下的项目属性的language standard字段中添加了“-std=c++17”标志。在那之后,构建传递了错误,但程序运行良好。因此,索引>重建的技巧解决了所有问题。

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

即使在编译之后,它是否仍在它们下面划线?嗯,这很不幸!我不确定是什么原因造成的。代码是在eclipse内部编译的,还是在外部编译的?如果是在外部编译,它可能只是IDE中缺少库定义……它应该在eclipse中使用EclipseAvr插件进行编译。这确实意味着它使用的是avr gcc/avr-g++,如果这就是你所说的“外部”的话。我遇到了这个问题,我只需要重新编制索引!这对我很有用:所有的下划线都是红色的,我的问题标签上说它们都是“语义错误”。虽然成功编译一个完全是红色的文件很有趣,但有没有办法至少隐藏所有这些红线P@It我花了2天的时间解决了这个问题。多亏了你。虽然路径已经指定,但我还是手动添加了它并重新生成了索引。这就完成了工作。像这样的错误非常令人沮丧,希望在下一个avr eclipse插件中解决这个问题。解决这个问题我可能会发疯,但你让它变成了一个2点解决方案索引->重建帮助我;)这救了我一天。谢谢@泰兹20