Подтвердить что ты не робот

Eclipse: функция 'to_string' не может быть решена

Возможный дубликат:
Отключить ошибки eclipse (это действительно ошибки)

Я столкнулся с этой досадной проблемой: Eclipse отказывается распознавать функцию std::to_string, но моя программа компилируется без ошибок. Что мне не хватает?

В соответствии с cppreference функция std::to_string определена в <string>, поэтому я включил ее явно в инкриминированный .cpp файл. Я также попробовал этот, этот и этот решений, без везения.

Любые другие предложения?

EDIT:

Я использую g++ 4.7.2 под Linux.

4b9b3361

Ответ 1

ОБНОВЛЕНИЕ: Я долгое время отправлял оригинальный ответ, и он устарел. Я дважды проверял сегодня (15 марта 2014 года): в Eclipse Kepler (Build id 20130614-0229) достаточно

  • добавить в Project > Properties > C/С++ Build > Настройки, а затем на вкладке "Параметры инструмента" Компилятор CCC С++ > Разный флаг -std=c++11,

  • затем в меню "Окно" > "Настройки" > "C/С++ > Сборка" на вкладке "Обнаружение" выбраны параметры встроенного компилятора CDT GCC и добавьте флаг -std=c++11 в команду, чтобы получить спецификации компилятора. На моей машине это выглядит после изменения:

    ${COMMAND} -E -P -v -dD -std=c++11 "${INPUTS}"

  • очистите и перестройте свой проект и ваш индекс (Project > C/С++ Index > Rebuild), поскольку Eclipse имеет тенденцию кэшировать сообщения об ошибках и показывать их, даже если они исчезли после изменения настройки.

Это действительно работает на моей машине. Если это не так, вы можете сделать снимок: С++ 11 полная поддержка Eclipse, хотя я не уверен в правильности этого подхода и не нужно делать это на своей машине. По состоянию на 7 марта 2014 года пользователи заявили, что они им помогли, тогда как вышеупомянутый подход не сделал.


Исходный пост, теперь устаревший:

Кажется, что вы столкнулись с общей проблемой с Codan, см. мой ответ здесь.


Не ясно, как код компилируется на 100%. В пределах Eclipse? Или из командной строки, правильно устанавливая флаги? Так что на всякий случай:

Вы используете функцию С++ 11. Вы передаете флаги -std=c++0x или -std=c++11 компилятору (предполагая gcc)?

Возможно, вам придется добавить __GXX_EXPERIMENTAL_CXX0X__ к вашим определениям (опять же, при условии gcc) и перезапустить Eclipse.

Забастовкa >

Ответ 2

В моем случае eclipse полагает, что __cplusplus определяется как 199711L, но я вполне уверен, что это должно быть определено чем-то в строках 201103L, потому что libstdc++ v3 использует

#if __cplusplus < 201103L
# include <bits/c++0x_warning.h>
#else

в большинстве новых заголовков С++ 11, таких как <future> и basic_string.h (где определено определение std:: to_string), которое включено <string>. Хотя при компиляции с g++ (Built by MinGW-builds project) 4.8.0 20121225 (experimental) я не получаю абсолютно никакой ошибки. Это странное поведение, по-видимому, смущает затмение и не позволяет правильно рассказать о включенных файлах.

Определение __cplusplus для чего-то более 201103L перед включением файлов С++ 11 должно исправить ошибки синтаксиса фиктивного затмения, такие как Symbol 'shared_ptr' could not be resolved.

#undef __cplusplus
#define __cplusplus 201900L

После выполнения переопределения вы захотите щелкнуть правой кнопкой мыши по проекту Index -> Rebuild & Freshen all files или еще лучше перезапустить eclipse все вместе.