Eclipse CDT:无法解析符号“cout”
Posted
技术标签:
【中文标题】Eclipse CDT:无法解析符号“cout”【英文标题】:Eclipse CDT: Symbol 'cout' could not be resolved 【发布时间】:2012-06-03 22:40:01 【问题描述】:错误如上。我有 eclipse 项目中应该包含的所有必要文件:
/usr/include/c++/4.6
/usr/include
/usr/include/linux
/usr/local/include
等等。
我试过 std::cout
和 using namespace std;
cout
但它仍然显示未解决。
我已经导入了iostream
和cstdlib
。
另外,我在 Ubuntu 12.04 和 eclipse 3.7.2 上。
代码sn-p:
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include "XPLMDisplay.h"
#include "XPLMGraphics.h"
int XPluginStart(char * outName, char * outSig, char * outDesc)
/* ... */
std::cout << "test" << std::endl;
/* ... */
使用命名空间标准;
更新:我从现有代码创建了 eclipse 项目。创建一个新的 c++ 项目可以修复它。我将接受解释现有项目中的哪些设置可能导致此问题的答案(因此我不必剪切和粘贴我的所有项目)。
【问题讨论】:
你导入iostream
了吗?
好吧,当我们谈论“导入”iostream 时,我希望你实际上是“#include .c
or .cpp
?
【参考方案1】:
很可能您的设置中缺少一些特定于系统的包含目录,这使得索引器无法正确解析 iostream,从而导致错误。在项目的上下文菜单中选择Index -> Search For Unresolved Includes
将为您提供未解决的包含列表,您可以在/usr/include
中搜索这些包含目录,并将包含目录添加到项目属性中的C++ Include Paths and Symbols
。
在我的系统上,我必须添加 /usr/include/c++/4.6/x86_64-linux-gnu
以解决 bits/c++config.h
和更多目录。
添加包含目录后不要忘记重建索引(Index -> Rebuild)。
【讨论】:
完美解决方案,赞。在添加了 cdt 的 adt+eclipse juno 捆绑包(ubuntu 12.04)上解决了关于 c++ 中 mysql 方法和类的本地错误消息的问题。赞成,当然! 对于我来说,Ubuntu 10.04,必须添加 /usr/include/c++/4.4/i486-linux-gnu 我必须将 include_directories("/usr/include/x86_64-linux-gnu") 添加到我的 cmake 文件中,然后生成的 eclipse 项目能够解析向量、cout、字符串和所有C++ STL 库中的其他现有组件。对于那些需要有关从 CMake 文件配置 Eclipse CDT 项目的更多信息的人,请参阅这篇文章:***.com/questions/9453851/… 升级系统后,我只需要重建索引;较新的 eclipse 4.4.1 在导入工作区/更新插件等时遇到了一些困难 对我来说,以下工作:1). [选择项目名称] --> 索引 --> 搜索未解决的包含 2).清理项目 3). 构建项目【参考方案2】:要消除您不想要的符号警告,首先您应该了解 Eclipse CDT 通常是如何首先出现未知符号警告的。这或多或少是它的过程:
-
Eclipse 检测系统上可用的 GCC 工具链
您的 Eclipse 项目已配置为使用特定工具链
Eclipse 在工具链上进行发现以查找其包含路径和内置定义,即使用相关选项运行它并读取输出
Eclipse 从包含路径中读取头文件
Eclipse 索引项目中的源代码
Eclipse 在编辑器中显示有关未解析符号的警告
从长远来看,解决早期步骤的问题可能比通过手动添加包含目录、符号等来覆盖其结果更好。
工具链
如果您安装了 GCC,并且 Eclipse 已检测到它,它应该将该 GCC 列为新 C++ 项目可以使用的工具链选项,这也将显示在 Preferred Toolchains
选项卡的 Toolchains
上的 Window -> Preferences -> C/C++ -> New CDT Project Wizard
中右侧的盒子。如果它没有出现,请参阅 the CDT FAQ's answer about compilers that need special environments(以及 Windows 用户的 MinGW 和 Cygwin 答案。)
如果您有一个现有的 Eclipse C++ 项目,您可以通过打开项目属性并转到 C/C++ Build -> Tool Chain Editor
并从 Current toolchain:
下拉菜单中选择所需的工具链来更改关联的工具链。 (如果您想要的工具链与之前在项目中设置的工具链有足够的不同,则必须先取消选中 Display compatible toolchains only
框。)
如果您在启动 Eclipse 后向系统添加了工具链,则需要重新启动它才能检测到工具链。
发现
然后,如果项目的C/C++ Build -> Discovery Options -> Discovery profiles scope
设置为Per Language
,在下一次构建期间,与项目关联的新工具链将用于自动发现包含路径和符号,并将用于更新“项目的C/C++ General -> Paths and Symbols
中的Includes
和Symbols
选项卡中显示的“内置”路径和符号。
索引
有时您需要在设置工具链并进行构建后再次重新索引以消除旧符号警告;右键单击项目文件夹并转到Index -> Rebuild
执行此操作。
(使用 Eclipse 3.7.2 / CDT 8 测试)
【讨论】:
【参考方案3】:感谢上面的答案。我正在为特定用例添加答案...
在具有两个目标架构的项目中,每个架构都有自己的构建配置(主要目标是嵌入式 AVR 平台;第二个目标是我的本地 Linux PC 用于运行单元测试)我发现也有必要设置 Preferences -> C/C++ -> Indexer -> Use active build configuration
至于将/usr/include/c++/4.7
、/usr/include
和/usr/include/c++/4.7/x86_64-linux-gnu
添加到Project Properties -> C/C++ General -> Paths and Symbols
然后重建索引。
【讨论】:
【参考方案4】:我先在这里尝试了标记的解决方案。它有效,但它有点老套,每次更新 gcc 时都需要重做。我终于通过执行以下操作找到了更好的解决方案:
Project
-> Properties
-> C/C++ General
-> Preprocessor Include Paths, Macros, etc.
Providers
-> CDT GCC built-in compiler settings
取消选中Use global provider shared between projects
(您也可以根据需要修改全局提供程序)
在Command to get compiler specs
的末尾添加-std=c++11
Index
->Rebuild
瞧,简单易行。希望这会有所帮助。
注意:我在开普勒。我不确定这是否适用于早期的 Eclipse。
【讨论】:
这是另一个问题的解决方案,即 C++11 符号未解决的问题。 OP 甚至无法解析像std::cout
这样的 C++98 符号。【参考方案5】:
我使用的是 Ubuntu 12.04 / Eclipse 4.2.1 / CDT 8.1.1 并且我曾经有过一段时间遇到同样的问题:从 SVN 导入 C++ 项目会导致这些烦人的“未解决的包含”错误,我会改为必须创建一个新项目并复制其中的文件作为解决方法(仍然是部分的,因为 SVN 功能不存在!)。
最后,我刚刚找到了一个简单、满意的解决方案:
转到Project -> Properties -> C/C++ General -> Preprocessor Include Paths, Macros etc. -> Providers
并检查Enable language settings providers for this project
。
重启 Eclipse。
希望这已经成功了。
【讨论】:
【参考方案6】:我在使用 MinGW 和 gcc 4.8.1 的 Eclipse 中遇到了与 *std::shared_ptr* 类似的问题。无论如何,Eclipse 都不会解析 *shared_ptr*。为了解决这个问题,我手动将 __cplusplus 宏添加到 C++ 符号和 - viola! - Eclipse 可以找到它。由于我将 -std=c++11 指定为编译选项,因此我(咳咳)假设 Eclipse 代码分析器也会使用该选项。所以,要解决这个问题:
-
项目上下文 -> C/C++ 常规 -> 路径和符号 -> 符号选项卡
在“语言”面板中选择 C++。
添加符号 __cplusplus,其值为 201103。
唯一的问题是 gcc 会抱怨符号已经定义(!)但是编译会像以前一样完成。
【讨论】:
【参考方案7】:对我来说,它有助于在 Properties -> C/C++-Build -> Discovery Options 中启用自动发现来解决此问题。
【讨论】:
【参考方案8】:我只是删除了按钮中的所有错误:问题列表。 然后关闭项目 并重新打开项目 清洁项目 构建所有 运行
然后那些愚蠢的错误就会消失。
【讨论】:
问题是如何解决包含问题。不是如何删除日食警告。 尽管如此,这似乎有时可以修复索引器 - 至少它对我有用。【参考方案9】:如果所有其他方法都失败了,就像我的情况一样,那么只需禁用注释。我用自己的 makefile 开始了一个 c++11 项目,但无法解决所有问题。即使您禁用注释,eclipse 仍然可以帮助您进行一些自动完成。最重要的是,调试器仍然可以工作!
【讨论】:
【参考方案10】:我在安装了Cygwin
的Windows
上使用Eclipse CDT (Kepler)
时遇到了同样的问题。将项目属性指向我能想到的每个 Cygwin 包括后,它仍然找不到cout
。
最后丢失的部分原来是C:cygwin64\lib\gcc\x86_64-pc-cygwin\4.8.2\install-tool\include
。
总结一下:
右键单击项目 选择Properties
导航到C/C++ General
> Paths and Symbols
> Includes
选项卡
点击Add...
点击File system...
浏览到 Cygwin lib\gcc\x86_64-pc-cygwin\4.8.2\install-tool\include
的位置
点击OK
以下是我的项目包含的内容,当一切都说完后,最终的样子:
【讨论】:
【参考方案11】:你们看错了部分。 最近对 Windows 感到沮丧后,当我在 Linux 中安装时,我意识到了这种差异,并且差异立即显现出来。
在新设置中,我在根据现有源创建的项目中有一个包含文件夹。我可以扩展它并看到大量包含;但是,我无法添加它们。 这导致我寻找这些文件的列出位置。
它们列在项目属性 > C/C++ 常规 > 预处理器包含 > GNU C++ 下 CDT GCC 内置编译器设置 [共享] 在那之下是大量的包含。
这些设置由您选择的工具链设置。
【讨论】:
【参考方案12】:我在 Ubuntu 16.04 上使用 cmake 创建了 Makefile 项目。
为 cmake 生成的 Makefiles 创建 eclipse 项目时,我创建了新项目,如下所示:
File --> new --> 使用现有代码的 Makefile 项目。
只有几次这样做后,我才注意到“用于索引器设置的工具链”的默认设置为无。 就我而言,我已将其更改为 Linux GCC,所有错误都消失了。
希望它有所帮助,如果它不是一个合法的解决方案,请告诉我。
干杯,
伙计。
【讨论】:
【参考方案13】:我在 ArchLinux 上更新 gcc 和 eclipse 后发生了这种情况。为我解决的问题是Project -> C/C++ Index -> Rebuild
。
【讨论】:
【参考方案14】:在自己尝试了一堆东西之后又添加了一点建议,但它不起作用....
我安装了 GCC 并且正确设置了包含的路径。也有 std 错误,并且无法为 cout 工作(我怀疑 SL 中的任何内容......)
我花了一段时间才意识到没有安装 g++ - gcc 是但不是 g++。所以就这样做吧:
sudo apt-get install g++
重启eclipse。假设上面提到的关于 gcc 和包含路径的细节没问题,你现在应该没问题...
【讨论】:
【参考方案15】:我的有点容易搞清楚右键>运行方式>运行配置
复选框包括系统库,继承的电源
【讨论】:
以上是关于Eclipse CDT:无法解析符号“cout”的主要内容,如果未能解决你的问题,请参考以下文章
Eclipse CDT 无法正确解析 <variant> 包含文件
C 文件与 C++ 文件的 Eclipse CDT 索引器结果不同