¿Qué son los errores de identificadores no declarados? ¿Cuáles son las causas más comunes y cómo se solucionan?
Ejemplos de textos de error:
error C2065: 'cout' : undeclared identifier
'cout' undeclared (first use in this function)
La mayoría de las veces provienen de olvidar incluir el archivo de cabecera que contiene la declaración de la función, por ejemplo, este programa dará un error de 'identificador no declarado':
int main() {
std::cout << "Hello world!" << std::endl;
return 0;
}
Para solucionarlo, debemos incluir la cabecera:
#include <iostream>
int main() {
std::cout << "Hello world!" << std::endl;
return 0;
}
Si escribiste la cabecera y la incluiste correctamente, la cabecera puede contener el include guard incorrecto.
Para obtener más información, consulte http://msdn.microsoft.com/en-us/library/aa229215(v=vs.60).aspx.
Otra fuente común de errores de principiante se produce cuando se escribe mal una variable:
int main() {
int aComplicatedName;
AComplicatedName = 1; /* mind the uppercase A */
return 0;
}
Por ejemplo, este código daría un error, ya que es necesario utilizar std::string
:
#include <string>
int main() {
std::string s1 = "Hello"; // Correct.
string s2 = "world"; // WRONG - would give error.
}
void f() { g(); }
void g() { }
g
no ha sido declarada antes de su primer uso. Para solucionarlo, mueve la definición de g
antes de f
:
void g() { }
void f() { g(); }
O añade una declaración de g
antes de f
:
void g(); // declaration
void f() { g(); }
void g() { } // definition
Esto es específico de Visual Studio. En VS, necesitas añadir `#include "stdafx.h"antes de cualquier código. El código antes de esto es ignorado por el compilador, así que si usted tiene esto:
#include <iostream>
#include "stdafx.h"
El #include <iostream>
sería ignorado. Tienes que moverlo a continuación:
#include "stdafx.h"
#include <iostream>
Siéntase libre de editar esta respuesta;
En C y C++ todos los nombres tienen que ser declarados 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 sólo en C), ya que no es necesario declararlas primero. El compilador de C asumirá que la función existe con el número y tipo de argumentos como en la llamada. Si la definición real de la función no coincide con eso, obtendrá otro error. Este caso especial para las funciones no existe en C++.
Este tipo de errores se soluciona asegurándose de que las funciones y las variables se declaran antes de ser utilizadas. En el caso de printf
necesitas incluir el fichero de cabecera <stdio.h>
(o <cstdio>
en C++).
Para las funciones estándar, te recomiendo que consultes, por ejemplo, este sitio de referencia, y busques las funciones que quieras utilizar. La documentación de cada función te indica qué archivo de cabecera necesitas.
Es como usar la función sin declararla. <stdio.h> el archivo de cabecera contendrá la función printf(). Incluya el archivo de cabecera en su programa esta es la solución para eso. Algunas funciones definidas por el usuario también pueden dar error si no se declaran antes de usarlas. Si se usa globalmente no hay problemas.