Я написал программу с использованием возможностей С++ 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++ 11 (или другой версией) и Eclipse, фактически поддерживающей его, вам нужно сделать две вещи.
Сначала необходимо установить флаг компилятора, так что -std=C++11
или -std=C++0x
добавляется при вызове g++ или любого другого.
Settings
C/C++ Build
↦, возможно, выберите предпочтительную конфигурацию, ↦ GCC C++ Compiler
(или любой другой используемый вами компилятор) ↦ " Dialect
.Other dialect
если он отсутствует в комбо (например, -std=gnu++14
или -std=C++1z
).
CDT теперь будет компилировать ваш компилятор с -std=C++0x
при компиляции. Теперь для этой части CDT поддерживает C++ 11 и не показывает ошибок для отсутствующих типов и т.д. Мой libstd C++ содержит строки, такие как
#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
текстовое поле Command to get compiler specs
в любом месте.Allocate console in the Console View
и нажмите "Применить". Теперь вы должны увидеть что-то вроде #define __cplusplus 201103L
в консоли.
Чтобы установить его для всего рабочего пространства, просто установите флажок Use global provider shared between projects
и нажмите " Workspace Settings
где открывается почти идентичный диалог.
Im в настоящее время пишет плагин, который расширяет новый мастер проектов C/C++, где можно выбрать версию C++ для проекта, которая правильно устанавливает флаг компилятора, а также указанные выше параметры для индексатора и некоторых других вещей. Но dunno, если он когда-либо будет интегрирован в CDT или должен быть установлен через плагин. Но через несколько месяцев он наверняка появится на https://www.cevelop.com.