【问题标题】:Eclipse C/C++ Shows Errors but Compiles?Eclipse C/C++ 显示错误但编译?
【发布时间】:2024-09-03 16:50:01
【问题描述】:

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

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

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

【问题讨论】:

  • 即使在你编译之后,它是否仍然在它们下划线?
  • 嗯,这很不幸!我不确定是什么原因造成的。
  • 代码是在eclipse内部编译还是在外部编译?如果它是在外部编译的,它可能只是 IDE 中缺少的库定义......
  • 它应该在 eclipse 中使用 eclipse AVR 插件编译。这确实意味着它正在使用 avr-gcc/avr-g++,如果这就是你所说的“外部”的话。
  • 我遇到了这个问题,我只需要重新索引!这对我有用:*.com/a/10554556/4561887

标签: c++ c eclipse arduino


【解决方案1】:

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

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

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

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

右击项目并选择Index -> Rebuild

【讨论】:

  • @我花了 2 天时间才解决了这个问题。谢谢你。虽然已经指定了路径,但我还是手动添加了它并重建了索引。这样就完成了。像这样的错误是非常令人沮丧,希望在下一个 avr eclipse 插件中解决这个问题。
  • 我本可以疯狂地解决这个问题,但你把它变成了 2 点击解决方案
  • 索引 -> 重建对我有帮助 ;)
  • 这拯救了我的一天。谢谢!
  • @tez 2016:问题仍然存在;)
【解决方案2】:

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

【讨论】:

  • 谢谢!有没有办法用特定的标准进行实际编译?
【解决方案3】:

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

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

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

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

【讨论】:

  • 所有的下划线都是红色的,我的问题标签显示它们都是“语义错误”。成功编译一个完全是红色的文件很有趣,有没有办法至少隐藏所有这些红线? :P
【解决方案4】:

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

【讨论】:

    【解决方案5】:

    我在

    中包含文件夹

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

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

    【讨论】:

      【解决方案6】:

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

      【讨论】:

        【解决方案7】:

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

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

        【讨论】:

        • 不是一个理想的解决方案。 在编译期间为您执行此操作,并将其基于您指定给编译器的 MCU。
        【解决方案8】:

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

        试试看,看看能不能解决你的问题。

        【讨论】:

          【解决方案9】:

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

          【讨论】: