在 Eclipse CDT 中使用 operator[] 解决向量向量中的“大小”问题

Posted

技术标签:

【中文标题】在 Eclipse CDT 中使用 operator[] 解决向量向量中的“大小”问题【英文标题】:Unresolved "size" in vector of vectors using operator[] in Eclipse CDT 【发布时间】:2017-06-19 11:32:12 【问题描述】:

我正在尝试在 OS X 上将 Eclipse CDT(仅用于“组织包含”功能)用于 C++ 项目。静态分析器(语法突出显示)似乎无法解析容器类中模板运算符重载的类型,例如 std::vector 和 operator[]。示例:

#include <vector>

int main() 
  std::vector<std::vector<int> > st = 0;

  st[0].size(); // Method 'size' could not be resolved
  st.front().size(); // no problem

此代码在 g++ 和 clang++ 中编译。我对完全关闭语法高亮并不感到兴奋(IDE 的意义何在?)。关于让 Eclipse CDT(特别是 OS X 上的 Neon.3 Release (4.6.3))理解这一点的任何想法?

编辑:用更简单的 MWE 更新,问题与使用结构无关。

编辑:添加了 Eclipse CDT 版本。

【问题讨论】:

这是实际的编译错误还是 CDT 错误?如果 CDT 在这方面不是最好的。我最终关闭了 CDT 突出显示。 对我来说代码很好。不相关:建议:不要使用所有大写标识符。 另一个不相关的建议:不要在 C++ 中使用typedef structstruct st int i; ; 就好了。 我目前无法访问 Mac 来测试这个,但我在过去 5 年的所有版本的 Eclipse 上都尝试过这个,g++ 4.8/5/6 和 clang++ 4 (在 Linux 64 位上)并且它们都可以工作。你能提供你的版本的错误报告吗? bugs.eclipse.org/bugs/enter_bug.cgi?product=CDT @MichaelWalz 是的,我试图说得很清楚。更新了,不想受到不良影响。 【参考方案1】:

Eclipse 不会在您每次键入新内容时编译您的代码,而是使用静态静态分析工具。不幸的是,该工具并不完美,并且会发生类似的事情。 https://wiki.eclipse.org/CDT/designs/StaticAnalysis

【讨论】:

我不认为尝试通过 operator[] 访问 STL 容器的 STL 容器真的很不寻常,所以这种问题将工具从“不完美”转移到“几乎无法使用”我的意见。我希望将来它不会成为问题,Eclipse CDT 的一些特性看起来很方便。

以上是关于在 Eclipse CDT 中使用 operator[] 解决向量向量中的“大小”问题的主要内容,如果未能解决你的问题,请参考以下文章

如何在Ubuntu中使用Eclipse + CDT开发C/C++程序

如何在Ubuntu中使用Eclipse + CDT开发C/C++程序

如何在Ubuntu中使用Eclipse + CDT开发C/C++程序

如何在Ubuntu中使用Eclipse + CDT开发C/C++程序

在 c++ Eclipse CDT 中使用不同的值构建

从 Eclipse CDT 项目中完全排除某些目录