Заявление участника не найдено - PullRequest
13 голосов
/ 17 февраля 2012

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

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

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

Ответы [ 7 ]

18 голосов
/ 20 марта 2013

«Объявление члена не найдено» - ошибка, выданная инструментом статического анализа Eclipse ( codan ).Если вы получили эту ошибку, но компиляция прошла успешно, это ложное срабатывание.Известно, что более ранние версии этого инструмента дают некоторые ложные срабатывания, см., Например, этот отчет об ошибке .Поэтому я рекомендую обновить 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>, но не решены (из-за неправильно настроенных путей включения).

7 голосов
/ 10 февраля 2015

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

1 голос
/ 11 января 2019

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

1 голос
/ 09 июля 2014

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

0 голосов
/ 04 февраля 2018

Я также столкнулся с этой проблемой, разбивая исходные и заголовочные файлы в eclipse. Я решил эту проблему путем «затмения методов» вместо ручного ввода и построения проекта. Благодаря реализации методов «встроенные функции» будут добавлены в исходный файл.

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

Даже с CDT 9.2.1 и Eclipse Neon 4.6.3 сообщается о проблемах «Объявление участника не найдено».Согласно ответу Шриджиянтана, следующее должно разрешить это: Project> C / C ++ Index> Rebuild.

0 голосов
/ 04 марта 2015

Я обнаружил ошибку в моем .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.
...