Čo sú chyby nedeklarovaného identifikátora? Aké sú ich bežné príčiny a ako ich odstrániť?
Príklady textov chýb:
'cout' undeclared (first use in this function)
Najčastejšie sa vyskytujú v dôsledku toho, že sa zabudne zahrnúť hlavičkový súbor, ktorý obsahuje deklaráciu funkcie, napríklad tento program vyhodí chybu 'undeclared identifier':
int main() {
std::cout << "Hello world!" << std::endl;
return 0;
}
Ak to chcete opraviť, musíme zahrnúť hlavičku:
#include <iostream>
int main() {
std::cout << "Hello world!" << std::endl;
return 0;
}
Ak ste hlavičku napísali a zahrnuli správne, hlavička môže obsahovať nesprávny include guard.
Viac informácií nájdete na stránke http://msdn.microsoft.com/en-us/library/aa229215(v=vs.60).aspx.
Ďalším častým zdrojom začiatočníckych chýb sú prípady, keď ste nesprávne napísali premennú:
int main() {
int aComplicatedName;
AComplicatedName = 1; /* mind the uppercase A */
return 0;
}
Napríklad tento kód by spôsobil chybu, pretože je potrebné použiť std::string
:
#include <string>
int main() {
std::string s1 = "Hello"; // Correct.
string s2 = "world"; // WRONG - would give error.
}
void f() { g(); }
void g() { }
g
nebol deklarovaný pred jeho prvým použitím. Ak to chcete opraviť, buď presuňte definíciu g
pred f
:
void g() { }
void f() { g(); }
Alebo pridajte deklaráciu g
pred f
:
void g(); // declaration
void f() { g(); }
void g() { } // definition
Toto je špecifické pre Visual Studio. Vo VS musíte pridať #include "stdafx.h"
pred akýkoľvek kód. Kód pred ním kompilátor ignoruje, takže ak máte toto:
#include <iostream>
#include "stdafx.h"
#include <iostream>
bude ignorované. Musíte ho presunúť nižšie:
#include "stdafx.h"
#include <iostream>
Neváhajte a upravte túto odpoveď.
V jazykoch C a C++ musia byť všetky názvy deklarované pred ich použitím. Ak sa pokúsite použiť názov premennej alebo funkcie, ktorá nebola deklarovaná, dostanete chybu "undeclared identifier".
Funkcie sú však v jazyku C (a len v ňom) špeciálnym prípadom v tom, že ich nemusíte najprv deklarovať. Prekladač jazyka C bude predpokladať, že funkcia existuje s počtom a typom argumentov ako pri volaní. Ak tomu skutočná definícia funkcie nezodpovedá, dostanete ďalšiu chybu. Tento špeciálny prípad pre funkcie v jazyku C++ neexistuje.
Chyby tohto druhu odstránite tak, že sa uistíte, že funkcie a premenné sú deklarované pred ich použitím. V prípade funkcie printf
je potrebné zahrnúť hlavičkový súbor <stdio.h>
(alebo <cstdio>
v C++).
V prípade štandardných funkcií odporúčam pozrieť si napr. stránku tento odkaz a vyhľadať funkcie, ktoré chcete používať. V dokumentácii ku každej funkcii sa dozviete, aký hlavičkový súbor potrebujete.
Je to ako Použitie funkcie bez jej deklarovania. <stdio.h> hlavičkový súbor bude obsahovať funkciu printf(). Zahrňte hlavičkový súbor do svojho programu to je riešenie pre tento prípad. Niektoré používateľom definované funkcie môžu tiež spôsobiť chybu, ak nie sú deklarované pred ich použitím. Ak sa používa globálne, nie sú žiadne problémy.