2012-03-19 3 views
5

Я играю с unique_ptr. В моем last post люди помогли мне скомпилировать программу, которая использовала этот указатель, указав -std = C++ 0x во время компиляции. Теперь мне было интересно, есть ли способ проинструктировать затмение рассмотреть C++ 11 во время автозаполнения?
unique_ptr не входит в список std :: namespace, и я не могу найти методы (reset, move ...), связанные с unique_ptr.unique_ptr autocomplete in eclipse

Спасибо Вахид

+0

Я знаю, что кто-то знает все 30 шагов, чтобы получить это право, но я хотел бы перейти к KDevelop и включить функция автозаполнения;) –

+2

Помогает ли совет в последнем комментарии к [этой ошибке] (https://bugs.eclipse.org/bugs/show_bug.cgi?id=314014)? Я не использую Eclipse, поэтому я не могу попробовать. –

+0

@Als Нет, это не сработало, но tanx. FYI, я открыл свойства проекта-> C/C++ Build-> Discovery Options-> GCC C++ Compiler: в аргументах компилятора Invokation я добавил -std = C++ 0x, но ничего не получилось. – rahman

ответ

1

Я думаю, вы должны добавить __GXX_EXPERIMENTAL_CXX0X__ определение ваших «Пути и символы» в Eclipse. См. Также этот вопрос GNU C++ how to check when -std=c++0x is in effect? и тот же вопрос Eclipse indexer can't resolve shared_ptr для shared_ptr.

+0

не мог этого сделать. Возможно ли, что кто-то более опытный? – rahman

+0

@rahman, посмотрите [тот же вопрос] (http://stackoverflow.com/q/8312854/72178) для 'shared_ptr', OP сообщил, что он сработал. – ks1322

+0

Я нахожусь в Eclipse Juno, и, установив этот символ для распознавания std :: unique_ptr, indexer использует любое использование std :: move с уникальным_ptr с ошибкой «недопустимый аргумент». – Hans

3

Заголовок «memory» (возможно, найденный в /usr/include/c++/4.9/memory) включает только «unique_ptr.h» и «shared_ptr.h» (возможно, найден в /usr/include/c++/4.9/ bits/unique_ptr.h и /usr/include/c++/4.9/bits/shared_ptr.h), если макрос «__cplusplus» равен или больше, чем «201103L». Проверьте memory.h для себя, чтобы увидеть условие препроцессора «#if» там, в строке 69 (или найдите строку «#if __cplusplus> = 201103L»).

Как упоминалось выше, компиляция с «-std = C++ 0x» или более поздними версиями стандартов C++ (-std = C++ 11 или -std = C++ 14) решает ошибки компиляции, но не индексацию затмений и проблема автозаполнения.

Чтобы решить проблему индексирования затмения, я добавил макрос препроцессора «__cplusplus» в свойства сборки проекта со значением «201103L», а затем обновил индекс;

Чтобы добавить макрос препроцессора:

"щелкните правой кнопкой мыши проект по проекту исследователя" >> свойства >> C/C++ General >> Препроцессор Включает >> Записи >> GNU C++ >> CDT Пользовательские настройки записи> > Добавить ... >> Макропроцессор препроцессора;

Затем введите макрос с именем «__cplusplus» и значением «201103L»;

Затем, чтобы обновить индекс, сделайте следующее:

«щелкните правой кнопкой мыши проект по проекту исследователя» >> Индекс >> Перестроить;

Ps .: Я использую GCC 4.9.2 и затмение Луны (4.4.2), на убунте 15.04 64бит

+0

Этот ответ мне очень помог, спасибо :) –

 Смежные вопросы

  • Нет связанных вопросов^_^