适用于Linux的Eclipse CDT

时间:2015-07-05 15:16:13

标签: c++ eclipse c++11 eclipse-cdt

我使用C ++ 11功能编写了一个程序。

/* * test.cpp * * Created on: 05-Jul-2015 * Author: avirup */ 
#include<vector> 
#include<iterator> 
#include<iostream> 
using namespace std; 
int main() { 
    vector<int> v; 
    v.push_back(5); 
    v.push_back(7); 
    for(auto i=v.begin();i!=v.end();i++) { 
        cout<<*i<<endl; 
    } 
    for(auto i=v.cbegin();i!=v.cend();++i) { 
        cout<<*i<<endl; 
    } 
} 

程序正在正确编译并显示结果,但编辑器显示的是有效函数下面的红线,如cbegin()和cend(),它们是常量引用迭代器。这很烦人。如何摆脱这个?

1 个答案:

答案 0 :(得分:0)

只是为了完整,因为这没有答案并给出解释。

要实现使用C ++ 11(或其他版本)进行编译,而Eclipse实际支持它,您需要做两件事。

首先需要设置编译器标志,以便在调用g ++或其他任何东西时附加-std=c++11-std=c++0x

  • 打开项目属性的属性。选择它并右键单击↦属性(或Windows用户的Alt + Enter)
  • 转到C/C++ BuildSettings,也许选择您喜欢的配置,↦GCC C++ Compiler(或您使用的任何其他编译器)↦Dialect
  • 从组合中选择或将标记写入Other dialect标记,如果组合中不存在(例如-std=gnu++14-std=c++1z)。

Select compiler dialect flag

CDT现在将在编译时使用-std=c++0x调用编译器。现在,CDT支持C ++ 11并且不会显示缺少类型等的错误。我的libstdc ++包含像

这样的行
#if __cplusplus < 201103L
# include <bits/c++0x_warning.h>
#else // C++0x

如果您在C / C ++编辑器中查看它们,则会导致您的错误和实际类型声明/定义显示为灰色。需要使用__cplusplus正确设置#define __cplusplus 201103L,以便CDT对其进行解析和编制索引。这也可以通过项目设置完成,也可以在整个工作区中完成。

  • 再次转到项目设置。
  • C/C++ GeneralPreprocessor Include Paths, Macros etc.,也可以选择您的首选配置,↦标签Providers
  • 选择编译器的条目(对我来说是CDT GCC Built-in Compiler Settings MinGW
  • -std=c++11-std=c++0x添加到任意位置的Command to get compiler specs文字字段。
  • 可选:选择Allocate console in the Console View并点击“应用”。您现在应该在控制台中看到类似#define __cplusplus 201103L的内容。

Set index flag for discovery

要为整个工作区设置它,只需选中Use global provider shared between projects,然后点击Workspace Settings,其中会打开几乎相同的对话框。

我正在编写一个插件,它扩展了新的C / C ++项目向导,可以为正确设置编译器标志的项目选择C ++版本,也可以为索引器和其他一些东西选择上述设置。但不知道它是否会被集成到CDT或需要通过插件安装。但肯定会在几个月内出现在https://www.cevelop.com