我已将我的Ubuntu框更新为11.10,然后Eclipse也已更新为3.7.0 Indigo with CDT 8.0.1
然后出现以下问题:
我已经包含了矢量头文件,但编译器说Symbol 'vector' could not be resolved
。我还定义了#define int Comparable
,但Eclipse也说Symbol 'Comparable' could not be resolved
等等......
虽然发生了很多错误,但编译成功完成了!
我曾尝试使用g ++编译代码,没有问题。
答案 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
命令行参数:
-clean
参数调用Eclipse可执行文件。 步骤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 ++包含路径不同。