【问题标题】: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++ BuildSettings,也许选择您喜欢的配置,↦ 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++ GeneralPreprocessor 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

【讨论】:

    猜你喜欢
    • 2021-12-11
    • 2012-06-29
    • 2011-08-27
    • 1970-01-01
    • 2010-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-26
    相关资源
    最近更新 更多