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" в строке меню.
Попробуйте это и посмотрите, разрешит ли он вашу проблему.