Поделиться через


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

Обновлен: Ноябрь 2007

Сообщение об ошибке

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

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

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

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

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

  3. Не указаны необходимые включаемые файлы (особенно при определении параметров 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;
}

Если при вызове универсальной функции не удается логически вывести предполагаемый аргумент типа на основании используемых параметров, возникает ошибка компилятора. Дополнительные сведения см. в разделе Generic Functions.

В следующем примере возникает ошибка 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++. Дополнительные сведения см. в разделе Критические изменения в компиляторе Visual C++ 2005.

В следующем примере возникает ошибка 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;
};