Eclipse:编译,但CODAN(内部代码分析器)为C ++ 11 <includes> </includes>中的函数提供错误

时间:2014-03-20 02:07:29

标签: c++ eclipse symbols

我在eclipse中有以下代码: 我正在使用CDT版本运行Indigo SR 2,64位版本:8.0.2.201202111925构建ID:@ build @ 我有Java SDK,Android SDK和C ++ CDT。 我相信问题只发生在c ++ 11函数上:似乎Eclipse的内部代码分析器CODAN没有正确找到库,即使编译器是(我的编译器上有std = C ++ 11标志)

我认为这个主题是相关的:http://www.eclipse.org/forums/index.php/t/490066/

#include <iostream>
#include <array>
using namespace std;

    int main(){
    cout << "test";

          array<int,5> myints;
          int x = 0;
          cout << "size of myints: " << myints.size() << std::endl;
          cout << "sizeof(myints): " << sizeof(myints) << std::endl;

          return 0;

    }

我收到错误/没有编译,因为我告诉你:

Symbol 'array' could not be resolved

为什么我不编译?我使用eclipse indigo和CDT以及cygwin。我可以根据需要提供更多信息。

更新:我使用Cygwin GCC和Cygwin PE Parser编译eclipse(锤子按钮或右键单击项目并单击构建)。

更新2:在indigo中运行会在编辑器中出现错误并且无法编译,Kepler会给出错误,但似乎成功运行和编译。有没有办法让kepler中的错误消失?另外,我如何从eclipse中将实际命令传递给编译器?

更新3:更奇怪的是,在Kepler中编译之后,它现在也会在indigo中编译,尽管错误在两个版本的文本编辑器中都存在。

1)有没有办法让这些错误更准确地编译?

2)我可以在include上按f3并查看它的来源,那么为什么eclipse似乎找不到数组符号呢?

3)我还被告知第一个std::endlInvalid overload of 'std::endl'

更新4:我尝试了std::tr1::array<int, 3> arr1 = {1, 2, 3};,但仍然告诉我无法解析数组。我已将-std=c++11添加到我的c / C ++ Build - &gt;设置 - &gt; Cygwin C ++编译器 - &gt;其他 - &gt;其他旗帜。它现在写着:-c -fmessage-length=0 -std=c++11但我现在看不到任何变化

更新:这个问题似乎正在解决这个问题: Eclipse C/C++ Shows Errors but Compiles? 但是,我已经添加了一个指向该目录的链接&#34; D:/Wamp/cygwin64/lib/gcc/x86_64-pc-cygwin/4.8.2/include"它没有改变任何东西......

谢谢!

2 个答案:

答案 0 :(得分:1)

我想我通过更改以下设置解决了这个问题: 项目 - &gt;属性 - &gt; C / C ++通用/预处理器包括路径,宏等 - &gt;提供商(标签)

然后&#34; CDT GCC内置编译器设置&#34; - &GT;点击链接&#34;工作区设置&#34; &#34; CDT GCC内置编译器设置&#34; (再次),在&#34;命令下获取编译器规格:&#34; 添加:"-std=c++11"

刷了一下,然后小红色的曲线消失了。

这是来源: http://www.eclipse.org/forums/index.php/mv/msg/373462/909018/#msg_909018

我也尝试过这样做: http://scrupulousabstractions.tumblr.com/post/36441490955/eclipse-mingw-builds 但它并没有完全奏效。可能是因为我在Ubuntu上。

答案 1 :(得分:0)

我在工作区设置> C / C ++>构建>设置>发现(选项卡)> CDT GCC内置编译器的“获取编译器规范的命令”的末尾添加了“ -std = c ++ 11”设置” ...

我已经设置了项目,因此在“属性”>“ C / C ++常规”下禁用了“启用项目特定设置”。

但是我仍然遇到C ++ 11相关的CODAN错误。

我刚刚发现,取消选中“启用项目特定设置”并不能保证该项目将使用工作空间中的“发现”设置。您仍然必须在项目中转到“属性”>“ C / C ++常规”>“预处理器包含路径,宏等”。>“提供程序”(选项卡)>“ CDT GCC内置编译器设置...”,并确保“使用共享的全局提供程序”选项“项目”已选中(在我的系统上,默认情况下,运行Eclipse IDE for C / C ++版本2019-09 R时,它不是默认状态)。选中此选项,“ CDT GCC内置编译器设置”现在在其旁边显示[共享]。

还有一些其他的发现提供程序,您需要在其中设置类似的选项,以确保[共享]显示在列表中(如果您尝试应用工作空间设置)。我留下的“ CDT用户设置条目”是特定于项目的,但我共享的其他条目是为了使用工作区级别的设置。

CODAN现在可以正常工作,并且我不再需要手动“刷新”索引和/或添加#include语句来微调CODAN。