¿Qué es un error de “identificador no declarado” y cómo lo soluciono?

¿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 comstackdor de Visual Studio: error C2065: 'printf' : undeclared identifier
  • Para el comstackdor de GCC: `printf' undeclared (first use in this function)

A menudo provienen de olvidar incluir el archivo de encabezado que contiene la statement de la función, por ejemplo, este progtwig 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  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  int main() { std::string s1 = "Hello"; // Correct. string s2 = "world"; // WRONG - would give error. } 

Uso antes de la statement

 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 statement de g antes de f :

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

Siéntase libre de editar esta respuesta.

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 comstackdor 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 comstackdor no ha visto una statement para él. Es decir, el comstackdor 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 comstackdor 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 comstackdores dan errores más específicos según el contexto. Por ejemplo, intentar comstackr 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.

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 comstackción “identificador” MyClass “no está definido” . Añadiendo

 using namespace  

o usando la clase como

 MyNamespace::MyClass myClass; 

resuelve el problema.

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 comstackdor 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 (o 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.

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 comstackdor no ve dónde se declaró el nombre y, en consecuencia, no sabe lo que significa.

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

En este caso particular, el comstackdor no ve la statement de nombre printf . Como sabemos (pero no el comstackdor) es el nombre de la función C estándar declarada en el encabezado en C o en el encabezado 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 statement de nombre al comstackdor incluyendo encabezados correspondientes.

Por ejemplo C:

 #include  int main( void ) { printf( "Hello World\n" ); } 

C ++:

 #include  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, asummos 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  void PrintHello() { std::printf( "Hello World\n" ); } int main() { printHello(); } 

En este caso, el comstackdor emitirá dicho error porque no ve la statement 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

Es como usar la función sin declararla. el archivo de encabezado contendrá la función printf (). Incluya el archivo de encabezado en su progtwig 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.

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.

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 comstackción del “identificador no declarado”.

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

Toda variable no declarada en error c se debe a que el comstackdor 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 , que es un archivo de salida de entrada estándar, que describe la funcionalidad printf ().

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

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