Eclipse CDT показывает семантические ошибки, но компиляция в порядке - PullRequest
29 голосов
/ 16 ноября 2011

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

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

Как это исправить?

Ответы [ 19 ]

0 голосов
/ 09 июля 2018

Это проблема индексации файла.

Решение - щелкните правой кнопкой мыши проект, Index-> ​​Freshen all files.

(Применимо к Eclipse CDT.Oxygen)

0 голосов
/ 12 июля 2017

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

int a;

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

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

int a, newone;

foo1()
{
  newone=0;
}


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

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

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

M.

0 голосов
/ 17 февраля 2016

попробуйте это:

Настройки -> c / c ++ -> Индексатор -> Индексировать все варианты заголовков

отметьте эту опцию.

0 голосов
/ 15 февраля 2016

У меня такая же проблема.Компилятор препроцессирует нормально, но статический анализатор - нет.В моем исходном файле:

#define PLATFORM_INC_FILES
#include <platform.h>

int coflags=O_BINARY; // Undefined symbol

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

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

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

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

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

0 голосов
/ 10 декабря 2015

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

0 голосов
/ 06 августа 2015

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

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

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

Project -> Properties -> C /Сборка C ++ -> Настройки -> Компилятор -> Включает

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

0 голосов
/ 11 октября 2014

В Ubuntu перейдите в «Окно»> «Установки»> «В поле поиска» введите «Indexer»> «Выберите Indexer» в левом столбце.Под заголовком «Параметры индексатора» отметьте следующие параметры (все, кроме тех, которые включают пропуск файлов):

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

Под заголовком «Стратегия индексирования» отметьте оба варианта:

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

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

  • Активная пользовательская конфигурация сборки
0 голосов
/ 18 мая 2013

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

0 голосов
/ 18 марта 2014

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

--- 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, и это решило проблему.

...