Eclipse C++:符号“std”无法解析

38
我在TestExecute.cpp中遇到了这个错误 -
"无法解析符号'std'"
代码:
#include <iostream>
using namespace std;

我刚在Eclipse中(在Windows 7上)创建了一个可执行项目,如下所示。看起来我选择的工具链不被支持。是这样吗?我已经安装了Cygwin,并且在首选项中可用。
编辑:根据@RobertoWilko的评论,删除“using namespace std;”这一行就消除了错误。但是二进制文件没有被创建。“启动失败。找不到二进制文件。” 如何纠正这个问题?

enter image description here

enter image description here

enter image description here

enter image description here


2
不,using namespace std;并不意味着std::突然总是表示std::std:: - fredoverflow
@RobertoWilko 删除了那行代码后错误消失了。但是二进制文件没有被创建。你有什么想法吗?“启动失败,找不到二进制文件”。 - LCJ
1
@Lijo- 我在这个论坛上读到了一个类似的问题,但是与CrossGCC相关,也许你可以看一下。我不是要混淆情况。在删除该行后,您需要添加std::,如果您不知道,请原谅。 - ChiefTwoPencils
1
在“C++ General”选项卡中检查“路径和符号”。如果您选择了工具链,应该能够看到正确的标准头文件包含路径。当然,这只有在正确配置环境的情况下才能完成。 - Torsten
1
检查这个解决方案,我遇到了同样的问题:https://dev59.com/PWEi5IYBdhLWcg3wq9xD#24981627 - USer22999299
11个回答

28
尝试以下步骤:https://www.eclipse.org/forums/index.php/t/636348/ 前往:
项目 -> 属性 -> C/C++常规 -> 预处理器包含路径、宏等 -> 提供程序
激活CDT GCC内置编译器设置
取消使用在项目之间共享的全局提供程序
添加命令行参数-std=c++11。 example

还有一步:重新启动Eclipse。(对我来说) - skytree

17

我不知道您是否已经解决了这个问题,但是我想为可能遇到相同问题的人发布我的解决方案。

  1. 首先,请确保在项目资源管理器中有“Includes”文件夹。 如果没有,请进行第二步。 如果有,请进行第三步。

  2. 其次,窗口->首选项->C/C++->构建->环境:创建两个环境变量:

    a) 名称:C_INCLUDE_PATH 值:/usr/include

    b) 名称:CPLUS_INCLUDE_PATH 值:/usr/include/c++

前往 Cygwin/usr/include/,如果找不到“c ++”文件夹,则从 \cygwin\lib\gcc\i686-pc-cygwin\X.X.X\include 复制并粘贴到此处,然后重新启动 Eclipse。

  1. 第三步,在 项目资源管理器->属性->C/C++通用->路径和符号->包含->语言: GNU C++ 中右键单击您的项目。如果您可以在“包含目录”中找到一些 C++ 文件夹,则单击应用并确定。稍微更改一下代码,然后保存。

你会发现没有任何符号无法解决的问题。

我记录下了我的解决方案,希望有人能从中受益。


7
您可以像这样重写代码:
#include<iostream>
#include<stdio.h>

using namespace std;

2
为了解决问题,他们在头文件中添加了.h是误导性的。真正的“旧”头文件才有.h扩展名。例如,“新”的(如果15年对您来说算是新的话)stdio.h实际上被称为cstdio。无论如何,我不明白这如何回答问题。 - Cubic
2
添加 #include<stdio.h> 可以解决该问题,因为 std 在此头文件中声明。 - App Work

7
对于MinGW,这对我有效:
右键单击项目,选择“属性”
转到“C / C ++通用” - “路径和符号” - “包含” - “GNU C ++” - “包含目录”
选择“添加”
选择“变量……”
选择“MINGW_HOME”,然后单击“确定”
单击“应用”和“确定”
您现在应该在项目资源管理器中的“包括”中看到几个MinGW路径。错误可能不会立即消失,您可能需要刷新/构建项目。
如果您使用的是Cygwin,则可能存在相应的变量。

5
在项目中的includes文件夹可能缺少/usr/include/c++。在项目资源管理器中,右键单击项目 -> 属性 -> C/C++构建 -> 环境 -> 添加 -> 值 = /usr/include/c++。重新启动eclipse。

3
我解决问题的方法是进入:项目 -> 属性 -> C/C++常规 -> 预处理器包含路径、宏等 -> 提供程序 -> CDT GCC内置编译器设置,启用该设置并禁用CDT Cross GCC内置编译器设置。

2

安装 C++ SDK:

帮助 > 安装新软件 > 工作区: 你的eclipse版本路径 > 搜索C++并安装C++ sdk开发工具。

路径示例: Mars - http://download.eclipse.org/releases/mars


1
这对我很有用,因为网络上其他方法都不行。我不知道是否必须的,但是在重启后,我点击了“项目> C / C ++索引> 重新解析未解决的包含文件”。我正在运行openSUSE(所以没有MinGW或Cygwin)。 - Alex Krycek

1
我在Kubuntu上使用Eclipse Neon时遇到了问题,我的16.04内核必须将#include <stdlib.h>更改为#include <cstdlib>,这使得std命名空间对Eclipse“可见”,并消除了错误。

1

这对我在Eclipse IDE for C/C++ Developers版本:2020-03(4.15.0)Build id:20200313-1211上起作用。此外,我的代码是交叉编译的。

  1. 创建一个新项目,确保它作为交叉编译解决方案被创建。您必须添加与您的交叉编译器位置相匹配的 /usr/bin 目录。
  2. 在项目属性中添加用于交叉编译器的 C 和 C++ 头文件。
  3. 对于 C:Project > Properties > C/C++ General > Paths and Symbols > Includes > GNU C. 添加... -> 来自您的交叉编译器的 /usr/include 目录的路径。
  4. 对于 C++:Project > Properties > C/C++ General > Paths and Symbols > Includes > GNU C++. 添加... -> 来自您的交叉编译器的 /usr/include/c++/ 目录的路径。
  5. 如果您不知道您的 gcc 版本,请在控制台中键入以下内容(确保它是您的交叉 gcc 二进制文件):

    gcc -v

  6. 修改交叉编译器的方言(这是关键)。

  7. 对于 C:Project > Properties > C/C++ Build > Settings > Tool Settings > Cross GCC Compiler > Dialect。设置为 ISO C99 (-std=C99) 或适合您的 C 文件标准。
  8. 对于 C++:Project > Properties > C/C++ Build > Settings > Tool Settings > Cross G++ Compiler > Dialect。设置为 ISO C++14 (-std=c++14) 或适合您的 C++ 文件标准。
  9. 如果需要,通过右键单击项目 > Index > Rebuild 来重新索引所有项目。

0
您所报告的问题似乎是由以下原因引起的:
  1. 您正在尝试编译C代码,但源文件具有.cpp扩展名
  2. 您正在尝试编译C ++代码,但源文件具有.c扩展名
在这种情况下,Eclipse无法识别要使用的正确编译器。

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