2012-06-22 3 views
6

После выполнения шагов в this post Мне удалось заставить Eclipse (Indigo) распознать unique_ptr (и другие новые материалы C++ 11). Проблема в том, что operator-> для unique_ptr, похоже, не поддерживается в Eclipse. Вот вам пример:Оператор разыменования для unique_ptr не работает в Eclipse

class Foo { void bar() { /* ... */ } }; 

std::unique_ptr<Foo> foo; 
(*foo).bar(); // 1 
foo->bar(); // 2 

Case 1 работает, как ожидалось: нет ошибок и автозавершения работы. Однако для случая 2 Eclipse отмечает инструкцию с ошибкой («Панель« Метод »не может быть разрешена»), плюс автозаполнение от foo-> не работает.

Самое интересное, что у меня нет проблем с std::shared_ptr. Это происходит только для std::unique_ptr.

У кого-то была такая же проблема? Кто-нибудь знает, как это исправить?

EDIT: только для уточнения целей, процесс компиляции подходит для фрагмента кода, показанного выше. Итак, проблема не в самом компиляторе, а на Eclipse.

+0

@ dirk: речь идет о автозаполнении и статическом выборе в IDE; нет упоминания о проблемах компиляции. – Rook

+0

@dirkgently Я использую g ++ 4.6, поэтому компиляция идет хорошо. Проблема затрагивает только Eclipse. – betabandido

+0

@ Rock: Правильно. Я пропустил этот бит. – dirkgently

ответ

0

Я, наконец, нашел bug report в CDT, описывая ту же проблему, что и я страдаю. До сих пор не существует реальное исправление для этой проблемы, но есть обходной путь объясняется в этом сообщении об ошибке:

Да, GCC 4.5 является последней версией GCC, чья библиотека заголовки может быть точно индексируется CDT. Основной причиной отказа от индексирования заголовков 4.6 является отсутствие CDT поддержки «constexpr» и «nullptr», которые широко используются в заголовках 4.6 (вероятность того, что это будет реализовано для Juno, кстати?).

Я работал вокруг этого, имея как GCC 4.5 и 4.6, установленный на моей системе , и указывая CDT заголовкам 4.5 в (установив компилятор Призыва команду «г ++ - 4,5» в опции Discovery) в то время как на самом деле компиляция с 4.6.

0

Этот вопрос был недавно исправлен в cdt 8.1.1. Просто зайдите help-> проверьте обновления, и он будет загружен и установлен. Я протестировал unique_ptr и правильно проиндексирован.