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

26

我正在Eclipse中编写一些Arduino代码,像Your Second Arduino Project所描述的那样,但每次使用Arduino库(例如Serial)时,Eclipse会下划线我的函数名称,声称它们无法解析。 然而,代码实际上可以编译,所以我有点不知所措,不明白为什么Eclipse认为这些函数丢失了。 如果有人知道如何解决这个问题,那就谢谢你了。

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

编辑2:我找到了我的错误,原来我在C文件中尝试使用一些C++函数,而Eclipse不喜欢它; 我将文件重命名为.cpp,所有红色下划线都消失了;) 谢谢你的帮助!


即使编译后它们是否仍然会被下划线标记? - Kiril
嗯,那真是不幸!我不确定是什么原因导致的。 - Kiril
代码是在Eclipse内部编译还是外部编译?如果是外部编译,可能只是IDE中缺少库定义的问题... - atk
它应该在带有Eclipse AVR插件的Eclipse中编译。这并不意味着它正在使用avr-gcc/avr-g++,如果你所说的“外部”是指它。 - SuperTron
我遇到了这个问题,只需要重新索引就可以了!这个方法对我有用:https://dev59.com/Umkv5IYBdhLWcg3wgQ-c#10554556 - Gabriel Staples
9个回答

42

根据配置,Eclipse可能会从您的构建设置中提取索引路径,也可能不会。最有可能的情况是它不会...这是因为您的构建设置没有问题,它正在正确构建,您也可以手动构建。

CDT索引器(决定所有漂亮下划线、代码完成、F3声明跳转等功能的引擎)在许多情况下无法智能解析您的Makefile,并知道在哪里查找头文件和源文件。您需要手动告诉Eclipse这些信息。

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

您需要投入的工作量可能因环境而异。如果这个外部库是唯一令您头疼的事情,那么您可能只需要添加该库的路径并重新索引:

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


@我花了2天时间解决这个问题。感谢你。虽然路径已经指定,但我手动添加了一次并重新构建了索引。这样做就解决了问题。像这样的错误非常令人沮丧,希望在下一个AVR Eclipse插件中解决此类问题。 - tez
4
我可以疯狂地解决这个问题,但是你让它成为了一个只需要两步点击就能解决的方案。 - Rahul Verma
5
索引重建对我很有帮助;) - sfelber
这拯救了我的一天。谢谢! - cristian
1
@tez 2016:问题仍然存在 ;) - HAL9000
显示剩余3条评论

9
首先,下划线是什么颜色?这很重要,因为黄色表示警告,红色表示错误(严重的,在大多数情况下无法构建)。
其次,您需要查看“问题”选项卡,以查看是否存在实际错误。如果没有任何内容,则确实已正确编译。
现在回到最初的问题。根据您正在构建的项目类型,这种行为并不罕见。Eclipse似乎在索引某些项目时做得不好。当您从命令行运行“make all”(这在构建期间实际上就是Eclipse所做的)时,它可能会解析您所有的代码并构建它。
但是,Eclipse使用一个不同的、单独的工具来索引您所有的源代码,并解析变量/函数定义和声明。这真的是左手不知道右手在做什么的情况。

4
所有下划线都是红色的,我的问题标签说它们全部是“语义错误”。尽管成功编译了一个完全是红色的文件很有趣,但是否有一种方法可以至少隐藏所有这些红色线条呢? :P - SuperTron

6
以下解决方案适用于我: 右键单击您的项目,然后:属性 -> C/C++常规 -> 路径和符号 -> 符号 -> GNU C++。 如果您遇到此问题,则几乎肯定没有任何符号。请添加名称为“__cplusplus”的符号,值为“201402L”。 之后: 右键单击项目 -> 索引 -> 重建 完成。

1
在我的情况下,问题是由于在项目属性的编译方言下添加了“-std=c++17”标志导致的。之后构建时出现错误,但程序运行正常。所以使用Index>Rebuild的技巧解决了一切。

谢谢!有没有一种实际编译特定标准的方法? - Al G Johnston
@AlGJohnston,如果我理解你的问题正确,你可以通过将我的示例中的c++17替换为-std=编译标志来使用任何标准进行编译。 - Hack06

1

我在项目属性中加入了文件夹:

Project Properties -> C/C++ General -> Paths and Symbols -> Includes

当我移除这些文件夹时,红色下划线消失了,即构建和IDE同步了。


1

1
如果您更改了配置(例如,使用记事本++编辑*.cproject文件),则以下选项可帮助。 构建配置 --> 清除所有,然后 索引 --> 重新构建

0

Eclipse在C++方面的表现不如Java,但是当你在菜单栏中按下“重建”时,它应该会警告你有关问题。

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


0

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

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


1
不是理想的解决方案。 <avr/io.h> 在编译期间为您执行此操作,并基于您指定给编译器的MCU。 - Larcho

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接