【问题标题】:Eclipse CDT syntax error but still compilesEclipse CDT 语法错误但仍可编译
【发布时间】:2019-04-19 05:12:03
【问题描述】:

我已经安装了最新的 MinGW (8.1.0) 并用 Eclipse Neon 和 Photon 进行了测试

#include <iostream>
#include <unordered_map>

int main(){
    std::unordered_map<int,std::string> dict = {{1,"one"},{2,"two"}};
    dict.insert({3,"three"});
    for(const auto& p: dict){std::cout << p.first << " = " << p.second << std::endl;}
}

编译正常,但insert 方法带有红色下划线。

Eclipse 给出错误:“插入”不明确

有什么方法可以更新 eclipse 索引器之类的吗?

编辑:
将参数强制转换为 const 会消除语法错误

dict.insert(std::pair<const int,std::string>{3,"three"});

编辑 2:
或者您可以将 MinGW (5.1.0) 与 C++11 方言一起使用

编辑 3:
Eclipse Photon R
GCC 7.3.0

编辑 4:
CDT 9.5.5 用于 Photon (19th Nov 2018)

Eclipse 4.6(Neon 2016)不再受支持。 (CDT 9.2)
不再支持 Eclipse 4.8 (Photon 2018)。 (CDT 9.5)
Eclipse 4.9 (2019) 现在正在兴起,从 CDT 9.6 开始。

【问题讨论】:

    标签: c++ eclipse-cdt


    【解决方案1】:

    这是一个影响 GCC 8 标准库标头的问题,在 Eclipse bug 540957 中跟踪。它已针对 CDT 9.6(作为 Eclipse 2018-12 的一部分发布)进行了修复。

    更新:该错误也已针对 CDT 9.5.5 进行了修复,计划于 2018 年 11 月 19 日进行带外发布。如果您正在运行 Eclipse Photon 或更高版本,Help -&gt; Check for Updates 应该会在此更新发布后获取它。

    在此之前的解决方法是使用 GCC 7 或更早版本。

    【讨论】:

    • 感谢您的洞察力。现在我发现我可以将参数转换为 const dict.insert(std::pair&lt;const int, std::string&gt;{3, "three"});
    • 是的,也有涉及更改代码的解决方法。
    • 我还测试了 GCC 7、6、5、4。但只有 GCC 5.1.0 有效(使用 C++11)。 (相同的 GCC 代码块使用)
    • 您需要确保 Eclipse 正在获取新的 GCC 头文件(例如,#include &lt;unordered_map&gt; 上的 F3 会将您带到正确的文件),然后重建索引,以使编译器的更改生效。
    • 我已经知道了,谢谢。 (这是你提供的明显的使用信息)但你可以构建它并获得新的标题。您重新索引以更正语法。 (这就是我所做的明显检查)
    猜你喜欢
    • 2011-12-30
    • 2011-08-16
    • 2017-04-01
    • 2011-11-12
    • 2013-05-23
    • 2011-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多