Объявление участника не найдено

Я работал над проектом C++, используя обычный текстовый редактор. Позже я импортировал все файлы в Eclipse, чтобы упростить его отладку.

В Eclipse происходит странная вещь. Он жалуется на "Объявление участника не найдено", даже если я включил заголовочный файл. Заголовочный файл имеет определение функции.

Как мне исправить эту проблему?

Ответ 1

"Объявление члена не найдено" - ошибка, выдаваемая инструментом статического анализа Eclipse (кодан). Если вы получили эту ошибку, но компиляция прошла успешно, это ложное срабатывание. Известно, что более ранние версии этого инструмента дают некоторые ложные срабатывания, см., Например, этот отчет об ошибке. Поэтому я рекомендую обновить Eclipse CDT до последней версии.

Еще одна вещь, которая может вызвать эту ошибку - это неразрешенное включение, которое не позволяет Eclipse правильно проанализировать часть вашего кода. Выбор Index → Search For Unresolved Includes включений в контекстном меню проекта даст вам список неразрешенных включений. Смотрите этот ответ для деталей, как это исправить.

Вот пример:

class C {
  void f(std::vector<int>&);
};

void C::f(std::vector<int>&) {} // Member declaration not found

Приведенный выше пример вызывает ошибку "Объявление элемента не найдено" в Eclipse CDT, даже если вы включили <vector> но не решили (из-за неправильно настроенных путей включения).

Ответ 2

Я тоже несколько раз сталкивался с этой проблемой в Eclipse, хотя строительство было успешным. Мы можем просто решить эту проблему, восстановив индекс C/С++ в меню проекта.:)

Ответ 3

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

Ответ 4

Я обнаружил ошибку в моем .cpp файле, который создает это сообщение. У меня был namespace std { в начале файла, и я поместил новые функции, которые я создавал после закрытия } для namespace. Перемещение закрытия } в конец файла, чтобы определенные файлы теперь находились в namespace, исправили сообщение об ошибке.

Пример, который создает ошибку.

#include "MyStrFuncs.h"

**namespace** std {

MyStrFuncs::MyStrFuncs() {
    // TODO Auto-generated constructor stub
}

MyStrFuncs::~MyStrFuncs() {
    // TODO Auto-generated destructor stub
}

}  // This ends the **namespace**

//Additional functions will now generate the member declaration not found error...

int MyStrFuncs::str2i(string strIn) {
    int results;
    istringstream convert(strIn);

    if( !(convert)>>results) results = 0;

    return results;
}
// Fix by moving closing } for namespace to here.  Good luck.

Ответ 5

Даже с CDT 9.2.1 и Eclipse Neon 4.6.3 "Декларация участника не найдена" сообщается о проблемах. Как ответил Шриджантан, следующее должно решить следующее: Проект > Индекс C/С++ > Перестроить.

Ответ 6

Я также столкнулся с этой проблемой при расщеплении исходных и заголовочных файлов в eclipse.I решил это путем "внедрения методов" eclipse вместо ручного ввода текста и создания проекта. В исходный файл будут добавлены методы реализации "встроенных функций".

Ответ 7

Я получил эту проблему в Eclipse, но строительство в терминале прошло успешно. Поэтому я просто перестроил индекс C/C++ в Eclipse: щелкните правой кнопкой мыши по проекту → index → rebuild.