Eclipse CDT для Linux

1

Я написал программу с использованием возможностей С++ 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
    Это распространенная проблема. Пожалуйста, прочитайте это например: stackoverflow.com/questions/13635079/… .
  • 0
    Попробуйте это: stackoverflow.com/questions/17131744/…
Показать ещё 1 комментарий
Теги:
c++11
eclipse-cdt

1 ответ

0

Просто для полноты, поскольку у этого нет ответа и объяснения.

Для достижения компиляции с C++ 11 (или другой версией) и Eclipse, фактически поддерживающей его, вам нужно сделать две вещи.

Сначала необходимо установить флаг компилятора, так что -std=C++11 или -std=C++0x добавляется при вызове g++ или любого другого.

  • Откройте свойства свойств для проекта. Выберите его и щелкните правой кнопкой мыши ↦ Свойства (или Alt + Enter для пользователей Windows)
  • Перейдите к Settings C/C++ Build ↦, возможно, выберите предпочтительную конфигурацию, ↦ GCC C++ Compiler (или любой другой используемый вами компилятор) ↦ " Dialect.
  • Выберите из комбо или напишите флаг на флаги Other dialect если он отсутствует в комбо (например, -std=gnu++14 или -std=C++1z).

Изображение 174551

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++ GeneralPreprocessor 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 в консоли.

Изображение 174551

Чтобы установить его для всего рабочего пространства, просто установите флажок Use global provider shared between projects и нажмите " Workspace Settings где открывается почти идентичный диалог.

Im в настоящее время пишет плагин, который расширяет новый мастер проектов C/C++, где можно выбрать версию C++ для проекта, которая правильно устанавливает флаг компилятора, а также указанные выше параметры для индексатора и некоторых других вещей. Но dunno, если он когда-либо будет интегрирован в CDT или должен быть установлен через плагин. Но через несколько месяцев он наверняка появится на https://www.cevelop.com.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню