在 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 struct
。 struct 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++程序