【问题标题】:Eclipse CDT for Linux适用于 Linux 的 Eclipse CDT
【发布时间】:2015-09-22 18:32:51
【问题描述】:
我编写了一个使用 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() 等常量引用迭代器等有效函数下方显示红线。这很烦人。如何摆脱这种情况?
【问题讨论】:
标签:
c++
eclipse
c++11
eclipse-cdt
【解决方案1】:
只是为了完整,因为这没有答案并给出解释。
要实现使用 C++ 11(或其他版本)和 Eclipse 实际支持它的编译,您需要做两件事。
首先需要设置编译器标志,以便在调用 g++ 或其他任何使用时附加 -std=c++11 或 -std=c++0x。
- 打开项目属性的属性。选择它并右键单击 ↦ 属性(或 Windows 用户 Alt+Enter)
- 转到
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.,也可以选择您喜欢的配置,↦ tab 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。