undeclared objective identificador error declarado c2065 c++ compiler-errors declaration undeclared-identifier

c++ - objective - undeclared identifier delphi



¿Qué es un error de "identificador no declarado" y cómo lo soluciono? (10)

A menudo provienen de olvidar incluir el archivo de encabezado que contiene la declaración de la función, por ejemplo, este programa dará un error de ''identificador no declarado'':

Falta el encabezado

int main() { std::cout << "Hello world!" << std::endl; return 0; }

Para solucionarlo, debemos incluir el encabezado:

#include <iostream> int main() { std::cout << "Hello world!" << std::endl; return 0; }

Si escribió el encabezado y lo incluyó correctamente, el encabezado puede contener el protector de inclusión incorrecto.

Para leer más, vea http://msdn.microsoft.com/en-us/library/aa229215(v=vs.60).aspx .

Variable mal escrita

Otra fuente común de error de principiante se produce cuando se escribe incorrectamente una variable:

int main() { int aComplicatedName; AComplicatedName = 1; /* mind the uppercase A */ return 0; }

Alcance incorrecto

Por ejemplo, este código daría un error, porque necesita usar std::string :

#include <string> int main() { std::string s1 = "Hello"; // Correct. string s2 = "world"; // WRONG - would give error. }

Uso antes de la declaración

void f() { g(); } void g() { }

g no ha sido declarado antes de su primer uso. Para solucionarlo, mueva la definición de g antes de f :

void g() { } void f() { g(); }

O agregue una declaración de g antes de f :

void g(); // declaration void f() { g(); } void g() { } // definition

Siéntase libre de editar esta respuesta.

¿Qué son los errores de identificación no declarados? ¿Cuáles son las causas más comunes y cómo las soluciono?

Ejemplos de textos de error:

  • Para el compilador de Visual Studio: error C2065: ''printf'' : undeclared identifier
  • Para el compilador de GCC: `printf'' undeclared (first use in this function)

Comprueba si estás importando los mismos paquetes en tu .m y en tu .h Ejemplo dado: tuve este problema con el método init y fue causado por perder el "#import" en el archivo .m


Considera una situación similar en la conversación. Imagina que tu amigo te dice: "Bob vendrá a cenar", y no tienes idea de quién es Bob. Vas a estar confundido, ¿verdad? Tu amigo debería haber dicho: "Tengo un colega de trabajo llamado Bob. Bob vendrá a cenar". Ahora Bob ha sido declarado y sabes de quién está hablando tu amigo.

El compilador emite un error de ''identificador no declarado'' cuando ha intentado utilizar algún identificador (cuál sería el nombre de una función, variable, clase, etc.) y el compilador no ha visto una declaración para él. Es decir, el compilador no tiene idea de a qué se refiere porque no lo ha visto antes.

Si obtiene ese error en C o C ++, significa que no le ha contado al compilador sobre lo que está tratando de usar. Las declaraciones a menudo se encuentran en los archivos de encabezado, por lo que es probable que no haya incluido el encabezado apropiado. Por supuesto, puede ser que simplemente no hayas recordado declarar la entidad en absoluto.

Algunos compiladores dan errores más específicos según el contexto. Por ejemplo, intentar compilar X x; donde el tipo X no ha sido declarado con clang te dirá "nombre de tipo desconocido X ". Esto es mucho más útil porque sabes que está tratando de interpretar X como un tipo. Sin embargo, si tiene int x = y; , donde y aún no se ha declarado, le dirá "uso de identificador no declarado y " porque hay cierta ambigüedad acerca de qué es exactamente lo que y podría representar.


En C y C ++ todos los nombres deben declararse antes de ser utilizados. Si intenta utilizar el nombre de una variable o una función que no ha sido declarada, obtendrá un error de "identificador no declarado".

Sin embargo, las funciones son un caso especial en C (y en C solamente) en el sentido de que no tiene que declararlas primero. El compilador C asumirá que la función existe con el número y tipo de argumentos como en la llamada. Si la definición de la función real no coincide, obtendrá otro error. Este caso especial para funciones no existe en C ++.

Corrige este tipo de errores asegurándose de que las funciones y las variables se declaran antes de que se utilicen. En el caso de printf , debe incluir el archivo de encabezado <stdio.h> (o <cstdio> en C ++).

Para las funciones estándar, le recomiendo que compruebe, por ejemplo, este sitio de referencia , y busque las funciones que desea usar. La documentación de cada función le indica qué archivo de encabezado necesita.


Es como usar la función sin declararla. el archivo de encabezado contendrá la función printf (). Incluya el archivo de encabezado en su programa esta es la solución para eso. Algunas funciones definidas por el usuario también pueden producirse por error cuando no se declaran antes de usarlo. Si se usa globalmente no hay problemas.


Estas medidas de error

1.For the Visual Studio compiler: error C2065: ''printf'' : undeclared identifier 2.For the GCC compiler: `printf'' undeclared (first use in this function)

significa que usa el nombre printf pero el compilador no ve dónde se declaró el nombre y, en consecuencia, no sabe lo que significa.

Cualquier nombre usado en un programa debe ser declarado antes de su uso. El compilador tiene que saber lo que el nombre denota.

En este caso particular, el compilador no ve la declaración de nombre printf . Como sabemos (pero no el compilador) es el nombre de la función C estándar declarada en el encabezado <stdio.h> en C o en el encabezado <cstdio> en C ++ y ubicada en estándar ( std:: y global ( :: (no necesariamente) espacios de nombre.

Entonces, antes de utilizar esta función, debemos proporcionar su declaración de nombre al compilador incluyendo encabezados correspondientes.

Por ejemplo C:

#include <stdio.h> int main( void ) { printf( "Hello World/n" ); }

C ++:

#include <cstdio> int main() { std::printf( "Hello World/n" ); // or printf( "Hello World/n" ); // or ::printf( "Hello World/n" ); }

A veces, el motivo de tal error es un simple error tipográfico. Por ejemplo, asumamos que usted definió la función PrintHello

void PrintHello() { std::printf( "Hello World/n" ); }

pero en main PrintHello un error tipográfico y en lugar de PrintHello printHello con la letra minúscula ''p''.

#include <cstdio> void PrintHello() { std::printf( "Hello World/n" ); } int main() { printHello(); }

En este caso, el compilador emitirá dicho error porque no ve la declaración del nombre printHello . PrintHello e printHello son dos nombres diferentes, uno de los cuales se declaró y el otro no se declaró, pero se utilizó en el cuerpo principal de


La mayoría de las veces, si está seguro de haber importado la biblioteca en cuestión, Visual Studio lo guiará con IntelliSense.

Esto es lo que funcionó para mí:

Asegúrese de que #include "stdafx.h" se declare primero, es decir, en la parte superior de todas sus inclusiones.


Toda variable no declarada en error c se debe a que el compilador no puede encontrarla en el proyecto. Uno puede incluir el archivo externo (encabezado) de la biblioteca en la que se define la variable. Por lo tanto, en su pregunta, necesita <stdio.h> , que es un archivo de salida de entrada estándar, que describe la funcionalidad printf ().

De acuerdo con la documentation , la declaración de fprintf () está en, es decir, debe incluirla, antes de usar la función.


Tuve el mismo problema con una clase personalizada, que se definió en un espacio de nombres. Traté de usar la clase sin el espacio de nombres, causando el error de compilación "identificador" MyClass "no está definido" . Añadiendo

using namespace <MyNamespace>

o usando la clase como

MyNamespace::MyClass myClass;

resuelve el problema.


Un identificador de C ++ es un nombre utilizado para identificar una variable, función, clase, módulo o cualquier otro elemento definido por el usuario. En C ++ todos los nombres deben declararse antes de ser utilizados. Si intenta utilizar el nombre de un tal que no ha sido declarado, obtendrá un error de compilación del "identificador no declarado".

De acuerdo con la documentation , la declaración de printf () está en cstdio, es decir, debe incluirla antes de usar la función.