为啥通过保存文件修复了 Eclipse C++“符号 'std' 无法解析”错误?

Posted

技术标签:

【中文标题】为啥通过保存文件修复了 Eclipse C++“符号 \'std\' 无法解析”错误?【英文标题】:Why is the Eclipse C++ "symbol 'std' could not be resolved" error fixed by saving the file?为什么通过保存文件修复了 Eclipse C++“符号 'std' 无法解析”错误? 【发布时间】:2015-12-01 18:06:21 【问题描述】:

我正在尝试学习如何使用 Eclipse 进行 C++ 开发(使用 MinGW)并且遇到了一个有趣的问题。


在编写一个简单的测试程序时出现以下错误:

但是,只需保存文件即可解决错误...为什么会发生这种情况?

保存后:


我真的很想发现像这样的简单错误,而不必手动保存文件...

我知道点击“保存”非常简单,但我了解自己,我会忘记,我会花费数小时试图找出实际上不是错误的错误。 (我敢肯定,using namespace std; 以外的其他情况也可能会发生这种情况。)

【问题讨论】:

However simply saving the file resolves the error... Why does this happen? Eclipse插件可能有bug? 以此为教训,永远不要再输入那些可怕的词using namespace std;。再也不会出现在你的生活中! 但我只是想向世界打个招呼:( @SergeyA:写出std::cout << "Hello" << std::endl; 也会以同样的方式进行。 std::coutstd::endl 得到红色下划线,直到我点击“保存” 虽然它不能解决问题,但使用键盘快捷键可能会减轻这种烦恼。确切的快捷方式取决于配置,它带有多个默认值,you can modify according to your preferences 【参考方案1】:

Eclipse 的 CODAN 工具在您键入时运行,不幸的是它只按需解析依赖项,通常需要保存。

为什么? Eclipse 的 CODAN 工具并不完全是瞪羚,因此在用户键入时必须跟踪文件的所有依赖项可能是系统杀手。这可能会随着时间的推移而改善。同时,定期保存。

而且,老实说,这可能是一种躲闪。它只需要在添加依赖项时搜索依赖项。但是有很多但是。将依赖项添加到依赖项时会怎样?或者一个新的依赖隐藏在宏中(不要这样做)并且很难在不挖掘依赖的情况下解析?或者通过添加触发条件编译的定义来暴露(我更喜欢不同的实现文件并让链接器将其排序为条件编译)?那……呢?

废话。如果人们想编写垃圾代码,那是他们的问题。静态分析器应该关注那些不想欺骗它并规避良好风格的人的需求。也就是说,我不知道 CODAN 代码,也不知道要更改它需要多深才能以可容忍的实时速率捕获和处理简单的案例。

但归根结底,您应该注意的唯一分析器是编译器——当然,警告级别最高为 11。 CODAN 并不完美。它会遗漏和误解内容,您可能会发现自己正在寻找一个不是 您的 代码中的错误的错误。如果编译器有错误,那是另一种情况,但可能性要小得多。一定要接受 CODAN 的帮助,但在你花时间处理一个奇怪的错误之前,请通过保存和构建程序来确保它确实是一个错误。

CODAN 配置的东西:

大部分 CODAN 的选项可以通过访问菜单上的 Project->Properties 并导航 Properties 对话框到 C/C++ General->Code Analysis

要打开配置 CODAN 的运行选项,例如关闭键入时更新,请更进一步C/C++ General->Code Analysis->Launching

您还会发现,如果您在另一个项目中编辑包含的标头,则必须强制重建索引以捕捉修改。从菜单中选择 Project->C/C++ Index->​​Rebuild 以执行包含的项目。

【讨论】:

以上是关于为啥通过保存文件修复了 Eclipse C++“符号 'std' 无法解析”错误?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我需要静态修饰符以及如何修复它?

保存到文件中的idea文件为啥是eclipse格式

为啥eclipse找不到文件夹。文件绝对存在于项目中,但在eclipse中显示不出

eclipse中定义的private变量保存之后都成final是为啥

为啥 c++ ifstream 不能从设备读取?

为啥用 C 复制文件比 C++ 快得多?