Cosa sono gli errori degli identificatori non dichiarati? Quali sono le cause comuni e come si risolvono?
Esempi di testi di errore:
errore C2065: 'cout' : identificatore non dichiarato
.'cout' undeclared (first use in this function)
Il più delle volte vengono dalla dimenticanza di includere il file header che contiene la dichiarazione della funzione, per esempio, questo programma darà un 'identificatore non dichiarato' errore:
int main() {
std::cout << "Hello world!" << std::endl;
return 0;
}
Per risolverlo, dobbiamo includere l'intestazione:
#include <iostream>
int main() {
std::cout << "Hello world!" << std::endl;
return 0;
}
Se avete scritto l'intestazione e l'avete inclusa correttamente, l'intestazione potrebbe contenere l'errata include guard.
Per saperne di più, vedi http://msdn.microsoft.com/en-us/library/aa229215(v=vs.60).aspx.
Un'altra fonte comune di errore per principianti si verifica quando si scrive male una variabile:
int main() {
int aComplicatedName;
AComplicatedName = 1; /* mind the uppercase A */
return 0;
}
Per esempio, questo codice darebbe un errore, perché dovete usare std::string
:
#include <string>
int main() {
std::string s1 = "Hello"; // Correct.
string s2 = "world"; // WRONG - would give error.
}
void f() { g(); }
void g() { }
g
non è stata dichiarata prima del suo primo utilizzo. Per risolverlo, spostate la definizione di g
prima di f
:
void g() { }
void f() { g(); }
Oppure aggiungere una dichiarazione di g
prima di f
:
void g(); // declaration
void f() { g(); }
void g() { } // definition
Questo è specifico per Visual Studio. In VS, devi aggiungere #include "stdafx.h"
prima di qualsiasi codice. Il codice prima di esso viene ignorato dal compilatore, quindi se hai questo:
#include <iostream>
#include "stdafx.h"
Il #include <iostream>
verrebbe ignorato. Devi spostarlo sotto:
#include "stdafx.h"
#include <iostream>
Sentiti libero di modificare questa risposta;
In C e C++ tutti i nomi devono essere dichiarati prima di essere usati. Se cercate di usare il nome di una variabile o di una funzione che non è stata dichiarata, otterrete un errore "undeclared identifier".
Tuttavia, le funzioni sono un caso speciale in C (e solo in C) in quanto non è necessario dichiararle prima. Il compilatore C assume che la funzione esista con il numero e il tipo di argomenti come nella chiamata. Se l'effettiva definizione della funzione non corrisponde a ciò, si otterrà un altro errore. Questo caso speciale per le funzioni non esiste in C++.
Si corregge questo tipo di errori assicurandosi che le funzioni e le variabili siano dichiarate prima di essere usate. Nel caso di printf
hai bisogno di includere il file header <stdio.h>
(o <cstdio>
in C++).
Per le funzioni standard, ti consiglio di controllare ad esempio questo sito di riferimento, e cercare le funzioni che vuoi usare. La documentazione per ogni funzione ti dice di quale file di intestazione hai bisogno.
È come usare la funzione senza dichiararla. Il file header stdio.h> conterrà la funzione printf(). Includete il file di intestazione nel vostro programma questa è la soluzione per questo. Alcune funzioni definite dall'utente possono anche avere un errore se non dichiarate prima di usarle. Se è usata globalmente nessun problema.