25

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

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

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

4

9 回答 9

41

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

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

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

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

右键单击项目并选择Index -> Rebuild

于 2012-05-11T15:42:01.417 回答
8

首先,下划线是什么颜色的?这会有所不同,因为黄色表示它是一个警告,而红色表示它是一个错误(关键,在大多数情况下不会构建)。

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

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

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

于 2012-05-11T15:34:44.430 回答
6

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

于 2017-09-09T21:53:07.057 回答
1

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

于 2014-07-15T20:35:30.947 回答
1

我有包含文件夹

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

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

于 2013-12-30T18:47:40.370 回答
1

在我的情况下,问题是由于在编译方言下的项目属性的语言标准字段中添加了“-std=c++17”标志。之后构建通过错误,但程序运行良好。所以 Index>Rebuild 的技巧解决了一切。

于 2020-04-07T19:10:11.603 回答
0

我有同样的问题。 索引-> 重建没有帮助。当我#include <avr/iom1280.h>main.cpp中添加行并使Index -> Rebuild下划线消失时。然后我删除了行#include <avr/iom1280.h>和项目仍然没有内线。

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

于 2014-03-24T11:13:32.203 回答
0

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

于 2020-05-06T04:57:13.717 回答
0

Eclipse 在 C++ 中的工作不如在 Java 中那样好,但是一旦您在菜单栏中按“重建”,它应该会警告您有关问题。

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

于 2016-02-21T22:21:03.533 回答