Compartir a través de


Error del compilador C2065

Actualización: noviembre 2007

Mensaje de error

'identificador' : identificador no declarado
'identifier' : undeclared identifier

Para poder utilizar una variable, hay que especificar antes su tipo en una declaración. Antes de poder utilizar una función, sus parámetros se deben especificar en una declaración (o prototipo).

Causas posibles:

  1. Está compilando con una versión de depuración en tiempo de ejecución de C, declarando una variable de iterador de la Biblioteca estándar de C++ en un bucle for y luego tratando de utilizar esa variable fuera del ámbito del bucle for. Compilar código de Biblioteca estándar de C++ con una versión de depuración en tiempo de ejecución de C implica /Zc:forScope. Para obtener más información, vea Debug Iterator Support.

  2. Se está llamando a una función de un archivo de encabezado del SDK no compatible actualmente con el entorno de generación.

  3. Omisión de archivos de inclusión necesarios, especialmente si se define VC_EXTRALEAN, WIN32_LEAN_AND_MEAN o WIN32_EXTRA_LEAN. Para acelerar las compilaciones, estos símbolos excluyen algunos archivos de encabezado de windows.h y afxv_w32.h. (Busque en windows.h y afxv_w32.h para obtener una descripción actualizada de qué es exactamente lo que se excluye.)

  4. El nombre del identificador está mal escrito.

  5. Las mayúsculas y minúsculas del identificador están especificadas de forma errónea.

  6. Falta una comilla de cierre después de una constante de cadena.

  7. Se ha especificado un ámbito de espacio de nombres incorrecto. Para resolver las funciones y los operadores de la biblioteca estándar de ANSI C++, por ejemplo, es necesario especificar el espacio de nombres std con la directiva using. El siguiente ejemplo produce un error al compilarse porque la directiva using está desactivada mediante un comentario y se ha definido cout en el espacio de nombres std:

Ejemplo

El ejemplo siguiente genera el error 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;
}

Cuando se llama a una función genérica, si el argumento de tipo que se desea no se puede deducir de los parámetros utilizados, el compilador informará de un error. Para obtener más información, vea Generic Functions.

El ejemplo siguiente genera el error 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
}

Este error también puede producirse como resultado del trabajo de conformidad del compilador realizado para Visual C++ 2005: comprobación de parámetros de los atributos de Visual C++. Vea Cambios importantes en el compilador de Visual C++ 2005 para obtener más información.

El ejemplo siguiente genera el error 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;
};