Ошибка компилятора C2065
Обновлен: Ноябрь 2007
Сообщение об ошибке
"идентификатор": необъявленный идентификатор
'identifier' : undeclared identifier
Перед использованием переменной необходимо указать ее тип в объявлении. Перед вызовом функции следует задать используемые в ней параметры в объявлении или прототипе.
Возможные причины:
При компиляции с использованием отладочной версии среды выполнения C в цикле for объявляется переменная-итератор из стандартной библиотеки C++. После этого выполняется попытка использования этой переменной вне цикла for. При компиляции кода стандартной библиотеки C++ с использованием отладочной версии среды выполнения C подразумевается установка параметра /Zc:forScope. Дополнительные сведения см. в разделе Поддержка итераторов отладки.
Выполняется вызов функции в файле заголовка SDK, которая не поддерживается в среде построения.
Не указаны необходимые включаемые файлы (особенно при определении параметров VC_EXTRALEAN, WIN32_LEAN_AND_MEAN или WIN32_EXTRA_LEAN). Эти символы позволяют исключить некоторые файлы заголовка из файлов windows.h и afxv_w32.h, что позволяет ускорить процесс компиляции. (Актуальное описание исключаемых файлов см. в файлах windows.h и afxv_w32.h.)
Ошибка в написании имени идентификатора.
Ошибка при использовании строчных и прописных букв в имени идентификатора.
Отсутствует закрывающая кавычка после строковой константы.
Недопустимое пространство имен. Для разрешения функций и операторов стандартной библиотеки 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;
};