Ошибка компилятора C2065

"идентификатор": необъявленный идентификатор

Перед использованием переменной необходимо указать ее тип в объявлении.Перед вызовом функции следует задать используемые в ней параметры в объявлении или прототипе.

Возможные причины:

  1. При компиляции с использованием отладочной версии среды выполнения C в цикле for объявляется переменная-итератор из стандартной библиотеки C++. После этого выполняется попытка использования этой переменной вне цикла for.При компиляции кода стандартной библиотеки C++ с использованием отладочной версии среды выполнения C подразумевается установка параметра /Zc:forScope.Дополнительные сведения см. в разделе Поддержка итераторов отладки.

  2. Выполняется вызов функции в файле заголовка SDK, которая не поддерживается в среде построения.

  3. Не указаны необходимые файлы include (особенно при определении параметров VC_EXTRALEAN, WIN32_LEAN_AND_MEAN или WIN32_EXTRA_LEAN).Эти символы позволяют исключить некоторые файлы заголовка из файлов windows.h и afxv_w32.h, что позволяет ускорить процесс компиляции.(Актуальное описание исключаемых файлов см. в файлах windows.h и afxv_w32.h.)

  4. Ошибка в написании имени идентификатора.

  5. Ошибка при использовании строчных и прописных букв в имени идентификатора.

  6. Отсутствует закрывающая кавычка после строковой константы.

  7. Недопустимое пространство имен.Для разрешения функций и операторов стандартной библиотеки ANSI C++ следует указать пространство имен std с помощью директивы using.В следующем примере возникает ошибка компиляции, поскольку в нем закомментирована директива using, и определена функция cout, содержащаяся в пространстве имен std:

Пример

Следующий пример приводит к возникновению ошибки C2065.

// C2065.cpp
// compile with: /EHsc
// using namespace std;
#include <iostream>
int main() {
   cout << "Hello" << endl;   // C2065

   // try the following line instead
   std::cout << "Hello" << std::endl;
}

Если при вызове универсальной функции не удается логически вывести предполагаемый аргумент типа на основании используемых параметров, возникает ошибка компилятора.Дополнительные сведения см. в разделе Универсальные функции (C++/CLI).

Следующий пример приводит к возникновению ошибки C2065.

// C2065_b.cpp
// compile with: /clr
generic <typename ItemType>
void G(int i) {}

int main() {
   // global generic function call
   G<T>(10);   // C2065
   G<int>(10);   // OK
}

Данная ошибка может также возникать в результате действий по обеспечению совместимости компилятора с Visual C++ 2005: проверка параметров для атрибутов Visual C++.

Следующий пример приводит к возникновению ошибки C2065.

// C2065_c.cpp
// compile with: /c
[module(DLL, name=MyLibrary)];   // C2065
// try the following line instead
// [module(dll, name="MyLibrary")];

[export]
struct MyStruct {
   int i;
};