我已经在Ubuntu 10.04 x86上为C / C ++ Linux开发人员安装了Eclipse Indigo。
当我使用常见的预定义宏__BASE_FILE__
时,Eclipse说Symbol '__BASE_FILE__' could not be resolved
,但编译没问题。我必须经常在我的代码中使用它,Eclipse用红线和bug图标填充我的屏幕:)
我该如何解决这个问题?
答案 0 :(得分:23)
不确定这是否解决了您的具体问题,但我也有语义错误。在完成一个有效的项目之后,他们才刚刚出现。
无论如何,我通过设置在工作区设置中使用单个选项修复它: “构建索引器的配置:使用活动的构建配置”
另一个选项是“使用项目索引器设置中指定的构建配置”,这是一个无效的选项。我认为在日食崩溃后它可能已经被破坏了。
答案 1 :(得分:20)
窗口 - >偏好 - > C / C ++ - >代码分析 - >语法和语义错误:关闭
这不能解决问题的原因,但至少会阻止显示错误错误。
答案 2 :(得分:5)
删除.metadata文件夹,然后删除导入项目。
这种方式还行!
答案 3 :(得分:5)
最简单的解决方案是重置索引器:
Window / Preferences / C / C ++ / Indexer。
取消选中"启用索引器" - >>行
重建所有,可能会显示很多错误
检查"启用索引器" - >>行
重建所有
这种错误可以通过电源故障强制关闭日食来产生。
答案 4 :(得分:3)
IMO正确的解决方案是在Project中定义符号 - >属性 - > C / C ++通用 - >路径和符号 - >符号标签。由于您可以假设编码器始终提供符号,因此您只需告诉Eclipse将其视为已定义。
我最近遇到了同样的问题,Eclipse抱怨未定义的宏,我总是使用-D<MACRO_NAME>
编译器选项提供。
答案 5 :(得分:3)
更新: 您必须向Project-&gt; Propoerties-&gt; C / C ++ General-&gt;路径和符号添加正确的路径。如果它没有帮助,您可以在Project-&gt; Properties-&gt; C / C ++ General-&gt; Code Analysis中配置Eclipse Code Analyzer(生成'错误')。根据您遇到问题的错误说明,请尝试自定义所选项 - &gt;范围 - &gt;排除模式。
答案 6 :(得分:3)
我认为它与workspace / .metadata有关。 我遇到了报告语义错误的问题,但Hello World编译并运行。 我删除了项目,创建了另一个,同样的错误报告。重新安装CDT,同样的事情。删除工作区,关闭Eclipse,重新启动,创建新的hello world,同样的事情。再次删除工作区,再次关闭Eclipse,这次注意到Eclipse在关闭期间无法找到它时重新创建了工作区文件夹。在Eclipse关闭的情况下删除了工作区。重新启动Eclipse,创建了HW项目,错误显示大约一秒然后消失。删除项目,创建另一个,错误显示一秒,然后poof。 如果你的工作区实际上有项目(我的是一个干净的安装),我打赌你可以删除工作区内的.metadata文件夹,它会修复它。
答案 7 :(得分:2)
您需要重建项目的索引。
右键单击项目,然后右键单击Index-&gt; Rebuild。
答案 8 :(得分:1)
在我的情况下,我最终发现索引器出现问题,因为同事“有帮助”地在两个头文件中复制了全部声明,而这些头文件只包含在项目中的C文件。删除重复项(并使一个标头包含另一个标头)可使索引器再次正常工作。
由于某些原因,特别是重复枚举的问题。我不知道为什么会这样。
答案 9 :(得分:1)
作为另一个答案添加,希望这将有助于某人。
我有一个简单的工作区(1个c ++共享对象(linux的DLL版本,3个c ++可执行文件和一个pydev python项目)
我检查了所有代码到新机器,并且它构建正常但在std-c和std-C ++代码上有很多“语义错误”并且包括..我经历了所有发现/索引器设置无济于事
==&GT;删除整个.metadata文件夹修复此问题。
由于我在工作区中没有任何非平凡的设置(所有在项目文件/ makefile中),eclipse愉快地创建了一个新的工作区,我只需要做一个文件 - &gt; import-&gt;现有项目
答案 10 :(得分:1)
我个人同意compostus的回答。
解决eclipse代码分析器的真正问题是很好的。
但是当我尝试这个步骤时: 在Project中定义符号 - &gt;属性 - &gt; C / C ++通用 - &gt;路径和符号
我找不到符号标签或任何添加符号的地方。我想要做的是将-DANDROID或#define ANDROID 1等宏放到eclipse中,以便代码分析器可以找到这个定义。
我在Mac OSX山狮之下。
答案 11 :(得分:0)
如果在Ubuntu上,请转到Window&gt;偏好&gt;在搜索框中键入“Indexer”&gt;在左列中选择Indexer。 在“索引器选项”标题下,勾选以下选项(除了涉及跳过文件的选项外):
在“索引策略”标题下,勾选两个选项:
在标题“索引器的构建配置”标题下,选择以下选项:
答案 12 :(得分:0)
不确定这是否适用于OP问题,但我在eclipse Luna中遇到了语义错误,并且能够通过遵循此主题中的说明来解决它们:Eclipse shows unresolved inclusion but it compiles
编译器找到标题,但Eclipse不是。
您可以帮助Eclipse并在以下位置设置头文件的路径:
项目 - &gt;属性 - &gt; C / C ++ Build - &gt;设置 - &gt;编译器 - &gt; 包括
在我的情况下,eclipse确定了我的一个include目录,但没有确定其中有子包含目录。
答案 13 :(得分:0)
我有一个类似的问题,但我的编译很好,但Eclipse在使用另一个包含文件的#define的行上显示错误。我通过检查&#34;索引所有标题变体&#34;来修复。我认为包含文件中的类别#ifndef FILENAME 在Indexer中多次处理,因此第二次定义了 FILENAME ,因此.h文件中的所有#defines都不是&# 34;看出&#34;由预处理器。转到窗口|偏好| C / C ++ |索引器。
答案 14 :(得分:0)
我在代码中使用了 #pragma once 。这种配置导致我遇到问题:
--- --- fileA.h
#pragma once
#define MYMACRO(X) func(X)
--- --- fileB.h
#include "fileA.h"
--- --- fileB.cpp
#include "fileB.h"
MYMACRO(5) <---- warning here
我用#ifndef #define HEADER_FILE_H #endif替换了一次#pragma,解决了这个问题。
答案 15 :(得分:0)
试试这个:
偏好设置 - &gt; c / c ++ - &gt;索引器 - &gt;索引所有标题变体
选中此选项。
答案 16 :(得分:0)
问题是这样发生的:我在代码中插入一个新的变量名,例如:这个例子中的“newone”:
int a;
foo()
{
a=17;
newone=23;
}
保存文件(因此索引器正在重建索引)。 然后我添加了定义:
int a, newone;
foo1()
{
newone=0;
}
foo()
{
a=17;
newone=23;
}
索引器仍会在“newone = 23;”行显示错误但不是包含“newone”的其他代码行。
解决方案:首先定义变量,然后使用它。
微米。
答案 17 :(得分:0)
这是文件索引问题。
解决方案-右键单击该项目,然后单击索引->刷新所有文件。
(适用于Eclipse CDT.Oxygen)
答案 18 :(得分:-1)
我有同样的问题。编译器预处理没问题,但静态分析器没有。在我的源文件中:
#define PLATFORM_INC_FILES
#include <platform.h>
int coflags=O_BINARY; // Undefined symbol
在platform.h(一个与操作系统相关的标题,以帮助创建可移植代码):
#ifdef PLATFORM_INC_FILES
#include <stdio.h>
...
在预处理包含的标头时,静态分析器似乎不会考虑.c #define语句。通过在符号对话框中定义它,错误消失,但这是一个项目范围符号定义,导致每个源包含我的每个系统头。
希望很快得到解决......
在MSIS2上使用Eclipse Mars和MinGW。
答案 19 :(得分:-1)
过去,我会在以下位置定义ANDROID符号: 项目 - &gt;属性 - &gt; C / C ++通用 - &gt;路径和符号 - &gt; #Symbols标签 但是,最新版本的Eclipse不再具有#符号或其他任何地方。 似乎在Eclipse中不再有任何定义符号的方法。 Eclipse有很多错误和问题。 我终于放弃了并转而使用Gedit和终端进行编译。