带有CDT的Eclipse 3.7.0 Indigo显示了许多错误的编译错误

时间:2011-11-01 05:05:22

标签: c++ eclipse eclipse-cdt

我已将我的Ubuntu框更新为11.10,然后Eclipse也已更新为3.7.0 Indigo with CDT 8.0.1

然后出现以下问题:

Eclipse errors

我已经包含了矢量头文件,但编译器说Symbol 'vector' could not be resolved。我还定义了#define int Comparable,但Eclipse也说Symbol 'Comparable' could not be resolved等等......

虽然发生了很多错误,但编译成功完成了!

我曾尝试使用g ++编译代码,没有问题。

8 个答案:

答案 0 :(得分:8)

问题在于索引器的角度中缺少一堆包含目录。

添加以下内容对我有用,但可能取决于您实际存在的特定设置:

/usr/include/c++/4.6.1
/usr/include/                
/usr/include/c++             
/usr/include/c++/4.6         
/usr/include/x86_64-linux-gnu
/usr/include/asm-generic
/usr/include/c++/4.6.1/x86_64-linux-gnu/

可以在Project>Properties>C++ Include Paths

中设置它们

据推测,将来CDT的平台专业化将自动包含在内。我记得在某处读过,但无法提供参考。

答案 1 :(得分:5)

Eclipse,VM或计算机崩溃或者甚至长达几个月的开发一次又一次地开始削弱Eclipse存储所有内容的工作空间的稳定性。

检查<workspace dir>\.metadata目录,了解Eclipse在工作区中生成和存储的数量。每次添加插件时,请升级插件,删除在工作区中放置和更改信息的插件。

一个证据就是这个问题通常在升级Eclipse之后出现。 (就我的情况来说是Indigo)。

修复尘土工作区的最简单方法是使用eclipse.exe可执行文件的-clean命令行参数。

Eclipse帮助文档告诉我们这个命令的作用:

  

如果设置为“true”,则OSGi框架使用的任何缓存数据   eclipse运行时将被擦干净。这将清理使用的缓存   存储bundle依赖解析和eclipse扩展注册表   数据。使用此选项将强制eclipse重新初始化这些   高速缓存。

有三种方法可以使用-clean命令行参数:

  1. 编辑位于您的eclipse.ini文件,并将其添加为第一行的第一个参数。
  2. 编辑用于启动Eclipse的快捷方式,并将其添加为第一个参数。
  3. 创建一个批处理或shell脚本,使用-clean参数调用Eclipse可执行文件。
  4. 步骤3的优点是您可以保留脚本并在每次要清理工作区时使用它。

    page解决了我的问题!希望它可以帮助其他人。

答案 2 :(得分:2)

在项目属性中,转到C / C ++ Build&gt;工具链编辑器,勾选仅显示兼容的工具链,然后选择Linux GCC并单击应用按钮。

现在,如果你去C \ C ++ General&gt;路径和符号,您将看到添加的新路径列表。如果重建索引,错误消息应该消失。

答案 3 :(得分:1)

代码分析导致了这种情况。它实际上并没有编译代码,只是做了一些静态检查以获得快速反馈。不幸的是我不知道如何解决它,我只是禁用它。对不起,我在工作,所以我没有CDT在我面前,但我认为它是这样的:

Window > Preferences > C++ General > Code Analysis

去那里取消选中所有方框以禁用它。

答案 4 :(得分:1)

当你创建一个C ++项目(在我的情况下来自现有代码)时,你必须将'Toolchain for Indexer Settings'设置为你使用的编译器(在我的例子中是'GNU Autotools Toolchains')。 在此之后,“路径和符号”将显示编译器的包含文件的正确路径。 错误将消失。 此设置仅在创建项目期间有用,稍后设置它没有帮助。

在indigo 3.7.2版本(以及更新版本)中,您的更改可能会在重建索引后生效。 Eclipse要求“重新索引”。较低版本可能需要手动重建索引标头等。

答案 5 :(得分:1)

更新的活动构建配置的索引选项适用于我,

我也从预先编入索引的文件列表中删除了一些文件,

答案 6 :(得分:0)

好的,这对我有用:

  • 删除了我从包含路径

  • 创建的头文件的路径
  • 编译了项目(显然编译器抱怨,因为它缺少用户定义的头文件)

  • 重新插入我创建的头文件的路径

  • 再次编译项目 - 完美地工作

我无法解释这个案子:(

答案 7 :(得分:0)

我在这里回答,因为这是我问题最接近的问题。

我使用QT Eclipse与Helios(3.6.2)集成,没有任何重大问题。我使用mingw 4.6.2,我已经安装到c:\ mingw。我想升级到Indigo,它解决了我在CDT上遇到的一些小问题。

然而,在Indigo(3.7 SR2)下,Eclipse开始强调琐碎的功能,因为没有解决,例如:

function 'fprintf' could not be resolved
function 'memset' could not be resolved

即使#include没有加下划线,也可以打开,并在标题中包含fprintf。即使代码本身编译得很好。

如果我回到Helios,问题就会消失。

我尝试重新编制索引,但无济于事。我检查了我的包含路径,它们是:

c:\mingw\include
C:\MinGW\lib\gcc\mingw32\4.6.2\include

起初,我刚刚包括了第一个,但不是第二个。但后来我搜索了“unresolved includes”,而stdio.h包含了stdarg.h,它不在mingw的主要include文件夹中,所以我添加了第二个。但是,仍然没有解决printf问题,也没有“未解决的问题”。

我用一个类创建了一个新的C ++项目。我添加了stdio.h,上面的路径,以及对fprintf的调用。它有下划线!即使stdio中的其他内容没有加下划线。

现在我知道这不仅仅是Qt问题。

在我阅读底部帖子之前,我已经解决了一段时间,建议删除包含路径和编译。我不相信它会起作用但是给了它一个机会。令人惊讶的是,即使编译失败,错误就消失了!

那时我又看了一下包含路径。它们已在编译步骤中更新为以下内容:

c:/mingw/lib/gcc/mingw32/4.6.2/include-fixed
c:/mingw/include
c:/mingw/lib/gcc/mingw32/4.6.2/include
c:/mingw/lib/gcc/mingw32/4.6.2/include/c++/backward
c:/mingw/lib/gcc/mingw32/4.6.2/include/c++/mingw32
c:/mingw/lib/gcc/mingw32/4.6.2/include/c++

这些被标记为“内置”值,我认为这意味着它们不是我添加的,并且可以在下次运行构建时更新。

所以,我想我的教训是,包括mingw下的每一个包含路径,即使Eclipse没有发现它是一个未解析的包含。

下一步是将所有这些路径放入我的Qt项目中。不幸的是,在这样做之后,尚未解决的功能仍然存在。它似乎是Qt C / C ++包含路径的某种错误,这些路径与CDT C / C ++包含路径不同。