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

Eclipse CDT показывает семантические ошибки, но компиляция в порядке

Я установил Eclipse Indigo для разработчиков C/С++ Linux на Ubuntu 10.04 x86.

Когда я использую общий предопределенный макрос __BASE_FILE__ Eclipse говорит Symbol '__BASE_FILE__' could not be resolved, но компиляция в порядке. Я должен использовать его так часто в моем коде, и Eclipse заполняет мой экран красными линиями и значками ошибок:)

Как я могу это исправить?

4b9b3361

Ответ 1

Не уверен, что это касается вашей конкретной проблемы, но у меня также были семантические ошибки. Они просто вышли из-под контроля после рабочего проекта.

Во всяком случае, я установил его с помощью одной опции в настройках рабочей области, установив: "Конфигурация сборки для индексатора: используйте конфигурацию активной сборки"

Другой вариант: "Использовать конфигурацию сборки, указанную в настройках индексатора проекта", и это тот, который не работал. Я думаю, что это могло быть повреждено после крушения затмения.

Ответ 2

Окно → Настройки → C/С++ → Анализ кода → Синтаксис и семантические ошибки: ВЫКЛ

Это не решит причину проблемы, но, по крайней мере, остановит отображение ложных ошибок.

Ответ 3

Удаление папки .metadata, а затем Импорт проекта.

Этот путь в порядке!

Ответ 4

Обновлено: Вы должны добавить правильные пути к Project- > Propoerties- > C/С++ General- > Paths and Symbols. Если это не помогает, вы можете настроить Eclipse Code Analyzer (который генерирует "ошибки" ) в Project- > Properties- > C/С++ General- > Code Analysis. В описании ошибки вы столкнулись с проблемой, попробуйте Настроить Selected- > Scope- > Шаблоны исключения.

Ответ 5

Я думаю, что это имеет какое-то отношение к рабочему пространству /. metadata. У меня была проблема с сообщениями о семантических ошибках, но Hello World компилируется и запускается. Я удалил проект, создал еще один, тот же отчет об ошибках. Переустановил CDT, то же самое. Удалено рабочее пространство, отключено Eclipse, перезапущен, создан новый мир привет, то же самое. Удалив рабочее пространство снова, снова закройте Eclipse, на этот раз заметили, что Eclipse воссоздал папку рабочего пространства во время выключения, когда он не смог ее найти. Удалено рабочее пространство с закрытием Eclipse. Перезапущенный Eclipse, созданный проект HW, ошибки показывают примерно секунду, а затем уходят. Удаленный проект, созданный еще один, ошибки отображаются в секундах, затем poof. Если у вас на самом деле были проекты в вашей рабочей области (моя была чистой установкой), я уверен, вы могли бы просто удалить папку .metadata в рабочей области, и она исправит ее.

Ответ 6

Самое простое решение для reset индексатора:

Окно/Предпочтения/C/С++/Indexer.
снимите флажок "Включить индекс" → > OK
перестроить все, может показать много ошибок
установите флажок "Включить индекс" → > OK
перестроить все

Эта ошибка может быть вызвана принудительным закрытием затмения сбоем питания.

Ответ 7

Вам нужно перестроить индекс вашего проекта.

Щелкните правой кнопкой мыши проект, а затем Index- > ​​Rebuild.

Ответ 8

IMO правильным решением является определить символ в Project → Properties- > C/С++ General → Paths and Symbols → вкладки Symbols. Поскольку вы можете предположить, что символ всегда будет предоставлен компилятором, вы просто скажете Eclipse, чтобы он определил его.

У меня была такая же проблема совсем недавно, когда Eclipse жаловался на макрос undefined, который я всегда поставляю с помощью опции -D<MACRO_NAME> компилятора.

Ответ 9

Я лично соглашаюсь с ответом компоста.

Хорошо решить реальную проблему, с которой работает анализатор кода затмения.

Но когда я пробую эти шаги: определить символ в Project → Properties- > C/С++ General → Paths and Symbols

Я не вижу вкладку символов или место для добавления символа. то, что я хочу сделать, это поместить макросы типа -DANDROID или #define ANDROID 1 для затмения, чтобы анализатор кода мог найти это определение.

Я под горным львом Mac OSX.

Ответ 10

добавление в качестве другого ответа, надеюсь, это поможет кому-то.

У меня есть простая рабочая область (1 С++ shared-object (версия Linux для DLL, 3 С++-исполняемых файлов и проект pydev python)

Я проверил весь код на новую машину, и он строит отлично, но имеет множество "семантических ошибок" на std-c и std-С++-коде и включает в себя. Я прошел через все настройки обнаружения/индексатора безрезультатно.

== > удаление всей папки .metadata исправлено.

Так как у меня не было ничего нетривиального, установленного в рабочей области (все в файлах проекта /make файлах), eclipse с радостью создало новую рабочую область, и мне просто пришлось делать файлы- > импорт- > существующие проекты

Ответ 11

Я использовал #pragma один раз в своем коде. Эта конфигурация вызвала у меня проблему:

--- fileA.h ---

#pragma once
#define MYMACRO(X) func(X)

--- fileB.h ---

#include "fileA.h"

--- fileB.cpp ---

#include "fileB.h"

MYMACRO(5)  <---- warning here

Я заменил #pragma один раз на #ifndef #define HEADER_FILE_H #endif, и это устранило проблему.

Ответ 12

Если на Ubuntu перейдите в окно > Настройки > В поле поиска введите "Indexer" > "Select Indexer" в левой колонке. В разделе "Параметры индексатора" отметьте следующие параметры (все, кроме тех, которые связаны с пропуском файлов):

  • Индексные файлы исходных файлов, не включенных в проект
  • Индекс неиспользуемых заголовков Индекс всех вариантов заголовков
  • Исходный индекс и файлы заголовков openend в редакторе
  • Разрешить эвристическое разрешение включает

В заголовке "Стратегия индексирования" отметьте оба параметра, которые:

  • Автоматическое обновление индекса
  • Обновить индекс сразу после каждого сохранения файла

В заголовке "Конфигурация сборки для индексатора" выберите следующую опцию:

  • Пользовательская конфигурация сборки

Ответ 13

Не уверен, что это работает для проблемы с OPs, но у меня были семантические ошибки в eclipse Luna, и я смог их разрешить, следуя инструкциям в этом потоке: Eclipse показывает неразрешенное включение, но оно компилируется

Компилятор находит заголовок, но Eclipse нет.

Вы можете помочь Eclipse и установить путь к файлам заголовков в разделе:

Проект → Свойства → C/С++ Build → Настройки → Компилятор → Включает в себя

В моей ситуации eclipse определил одну из моих каталогов включений, но не определил, что внутри нее есть каталоги sub-include.

Ответ 14

У меня была аналогичная проблема, но моя компиляция была прекрасной, но Eclipse показывал ошибки в строках, которые использовали #define из другого файла include. Я исправил, указав "Индексировать все варианты заголовков". Я думаю, что classis #ifndef FILENAME в include файле был несколько раз обработан в Indexer, и поэтому 2-й раз был определен FILENAME, поэтому все #defines в .h файле не были "замечены" "препроцессором. Перейти к окну | Настройки | C/С++ | Индексатор.

Ответ 15

попробуйте следующее:

Настройки → c/С++ → Indexer → Указатель всех вариантов заголовков

проверьте эту опцию.

Ответ 16

Проблема возникает следующим образом: я вставляю новое имя переменной в код где-то, например. "newone" в этом примере:

int a;

foo()
{
  a=17;
  newone=23;
}

Файл сохраняется (поэтому индексирование переиндексируется). Затем я добавил определение:

int a, newone;

foo1()
{
  newone=0;
}


foo()
{
  a=17;
  newone=23;
}

Индексатор по-прежнему будет показывать ошибку в строке "newone = 23;" но не в других строках кода, содержащих "newone".

Решение: сначала определите свои переменные, а затем используйте его.

М.

Ответ 17

В прошлом я бы определил символ ANDROID в: Project → Properties- > C/С++ Общие → Контуры и символы → вкладка #Symbols Однако в последней версии Eclipse больше нет символа # или где-либо еще. Кажется, что в Eclipse больше нет способа определять символы. У Eclipse так много ошибок и проблем. Я, наконец, сдался и переключился на использование Gedit и терминала для компиляции.

Ответ 18

У меня та же проблема. Предварительные процессы компилятора в порядке, но статический анализатор этого не делает. В исходном файле:

#define PLATFORM_INC_FILES
#include <platform.h>

int coflags=O_BINARY; // Undefined symbol

В platform.h(заголовок, зависимый от ОС, для создания портативного кода):

#ifdef PLATFORM_INC_FILES
    #include <stdio.h>
    ...

Похоже, что статический анализатор не учитывает операторы.С#define, когда предварительная обработка включает заголовки. Определяя его в диалоговом окне символов, ошибки исчезают, но это определение символа области проекта, в результате каждый источник включает каждый заголовок системы в моем случае.

Надеюсь, что он скоро исправится...

Использование Eclipse Mars и MinGW на MSIS2.