我使用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(),它们是常量引用迭代器。这很烦人。如何摆脱这个?
答案 0 :(得分:0)
只是为了完整,因为这没有答案并给出解释。
要实现使用C ++ 11(或其他版本)进行编译,而Eclipse实际支持它,您需要做两件事。
首先需要设置编译器标志,以便在调用g ++或其他任何东西时附加-std=c++11
或-std=c++0x
。
C/C++ Build
↦Settings
,也许选择您喜欢的配置,↦GCC C++ Compiler
(或您使用的任何其他编译器)↦Dialect
。Other dialect
标记,如果组合中不存在(例如-std=gnu++14
或-std=c++1z
)。
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++ General
↦Preprocessor 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
的内容。
要为整个工作区设置它,只需选中Use global provider shared between projects
,然后点击Workspace Settings
,其中会打开几乎相同的对话框。
我正在编写一个插件,它扩展了新的C / C ++项目向导,可以为正确设置编译器标志的项目选择C ++版本,也可以为索引器和其他一些东西选择上述设置。但不知道它是否会被集成到CDT或需要通过插件安装。但肯定会在几个月内出现在https://www.cevelop.com。