Eclipse C/С++ показывает ошибки, но компилирует?

Итак, я создаю код Arduino в eclipse, как описано в Your Second Arduino Project, но каждый раз, когда я использую библиотеку Arduino, такие как Serial, Eclipse подчеркивает мои имена функций, утверждая, что они не могут быть разрешены. Однако код действительно компилируется, поэтому я не понимаю, почему Eclipse считает, что функции отсутствуют. Если кто-нибудь имеет представление о том, как решить эту проблему, это будет оценено. Спасибо заранее.

EDIT: я должен был быть более конкретным, Eclipse подчеркивает МЕТОДЫ внутри библиотек Arduino. Поэтому, если я использую Serial.println("hello");, он подчеркивает println() и утверждает, что он не может быть разрешен. Затем он компилируется просто отлично, и метод работает при загрузке на плату arduino.

EDIT2: я нашел свою ошибку, оказывается, я пытался использовать некоторые С++-функции в файле C, а eclipse не понравилось; Я переименовал в .cpp, и все красные исчезли;) Спасибо за вашу помощь!

Ответы

Ответ 1

Для начала, какой цвет является подчеркиванием? Это имеет значение, поскольку желтый означает предупреждение, а красный означает ошибку (критический, не будет использоваться в большинстве случаев).

Во-вторых, вам нужно посмотреть вкладку "Проблемы", чтобы увидеть, есть ли реальные ошибки. Если там ничего нет, он действительно правильно компилируется.

Теперь вернемся к исходному вопросу. В зависимости от типа проекта, который вы строите, этот тип поведения не так уж и необычен. Кажется, что Eclipse плохо работает над индексированием определенных проектов. Когда вы запускаете "make all" из командной строки (что эффективно делает Eclipse во время сборки), это, вероятно, разрешает весь ваш код и строит его просто отлично.

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

Ответ 2

Eclipse может или не может тянуть пути к индексу из вашей сборки, в зависимости от конфигурации. Скорее всего, это не... он правильно строится, потому что ваша установка сборки просто прекрасна, и вы, вероятно, можете создать вручную.

Индексатор CDT (который является механизмом для решения, где происходят все эти симпатичные подчеркивания, а также завершение кода, прыжки с декларацией F3 и т.д.) недостаточно востребован во многих случаях для анализа ваших Make файлов и знает где искать заголовки и источник. Вы должны сообщить Eclipse, что информация вручную.

Перейдите в Свойства проекта → C/С++ Общие → Контуры и символы.

Объем работы, который вам нужно внести в это, может сильно различаться в зависимости от вашей среды. Если эта внешняя библиотека является единственной вещью, которая дает вам головные боли, вам, вероятно, просто нужно добавить пути к этой библиотеке и переиндексировать:

Щелкните правой кнопкой мыши проект и выберите Индекс → Перестроить

Ответ 3

У меня были папки в

Свойства проекта → C/С++ Общие → Контуры и символы → Включает

Когда я удалил их, красные подчеркивания ушли, т.е. сборка и среда IDE, где в синхронизации.

Ответ 4

При разрешении символов, CDT-индексщик, кажется, рассматривает все файлы заголовков независимо от того, какие из них действительно включены в блок компиляции. В Eclipse Bugzilla есть соответствующий отчет об ошибке: https://bugs.eclipse.org/bugs/show_bug.cgi?id=439553

Ответ 5

Решение ниже работало для меня: Нажмите на свой проект, щелкнув правой кнопкой мыши. Затем: Свойства → C/С++ Общие → Контуры и символы → Символы → GNU С++. Почти наверняка нет никаких символов, если у вас есть эта проблема. Добавить символ "__cplusplus" со значением "201402L" После этого: Щелкните правой кнопкой мыши Проект → Индекс → Восстановить Вы закончили.

Ответ 6

У меня была та же проблема. Индекс → Реконструкция не помогла. Когда я добавил строку #include <avr/iom1280.h> в main.cpp и сделал Index → Rebuild, подчеркивает disapeared. Затем я удалил строку #include <avr/iom1280.h> и выполнил проект без использования inderlines.

Замените iom1280.h на имя вашего контроллера. Посмотрите папку "avr\include\avr \" для доступных имен

Ответ 7

Eclipse не работает с С++, как и с Java, но он должен предупредить вас о проблемах, как только вы нажмете "Rebuild" в строке меню.

Попробуйте это и посмотрите, разрешит ли он вашу проблему.