Wat zijn undeclared identifier errors? Wat zijn veel voorkomende oorzaken en hoe los ik ze op?
Voorbeeld fout teksten:
fout C2065: 'cout' : undeclared identifier
'cout' undeclared (eerste gebruik in deze functie)
Ze komen meestal doordat vergeten wordt het header-bestand dat de functiedeclaratie bevat op te nemen, bijvoorbeeld, dit programma zal een 'undeclared identifier' fout geven:
int main() {
std::cout << "Hello world!" << std::endl;
return 0;
}
Om het te herstellen, moeten we de header invoegen:
#include <iostream>
int main() {
std::cout << "Hello world!" << std::endl;
return 0;
}
Als je de header hebt geschreven en correct hebt geincludeerd, kan de header de verkeerde include guard bevatten.
Voor meer informatie, zie http://msdn.microsoft.com/en-us/library/aa229215(v=vs.60).aspx.
Een andere veel voorkomende bron van beginnersfouten komt voor wanneer je een variabele verkeerd spelt:
int main() {
int aComplicatedName;
AComplicatedName = 1; /* mind the uppercase A */
return 0;
}
Bijvoorbeeld, deze code zou een fout geven, omdat je std::string
moet gebruiken:
#include <string>
int main() {
std::string s1 = "Hello"; // Correct.
string s2 = "world"; // WRONG - would give error.
}
void f() { g(); }
void g() { }
g
is niet gedeclareerd voor zijn eerste gebruik. Om dit op te lossen, verplaats de definitie van g
voor f
:
void g() { }
void f() { g(); }
Of voeg een declaratie van g
toe voor f
:
void g(); // declaration
void f() { g(); }
void g() { } // definition
Dit is specifiek voor Visual Studio. In VS, moet je #include "stdafx.h"
toevoegen voor elke code. Code ervoor wordt genegeerd door de compiler, dus als je dit hebt:
#include <iostream>
#include "stdafx.h"
De #include <iostream>
zou genegeerd worden. Je moet het naar beneden verplaatsen:
#include "stdafx.h"
#include <iostream>
Voel je vrij om dit antwoord te bewerken.
In C en C++ moeten alle namen worden gedeclareerd voordat ze worden gebruikt. Als u probeert de naam van een variabele of een functie te gebruiken die niet is gedeclareerd, krijgt u een "undeclared identifier" foutmelding.
Echter, functies zijn een speciaal geval in C (en alleen in C) in die zin dat je'ze niet eerst hoeft te declareren. De C compiler zal aannemen dat de functie bestaat met het aantal en type argumenten zoals in de aanroep. Als de werkelijke functie-definitie daar niet mee overeenkomt, krijg je een andere foutmelding. Dit speciale geval voor functies bestaat niet in C++.
U lost dit soort fouten op door ervoor te zorgen dat functies en variabelen worden gedeclareerd voordat ze worden gebruikt. In het geval van printf
moet je het header bestand <stdio.h>
includen (of <cstdio>
in C++).
Voor standaard functies, raad ik u aan om bijvoorbeeld deze referentie site te raadplegen, en te zoeken naar de functies die u wilt gebruiken. De documentatie voor elke functie vertelt je welk header bestand je nodig hebt.
Het is alsof je de functie gebruikt zonder hem te declareren. <stdio.h> header bestand zal de functie printf(). Neem het header bestand op in je programma dit is de oplossing voor dat. Sommige door de gebruiker gedefinieerde functies kunnen ook een fout krijgen als ze niet worden gedeclareerd voordat ze worden gebruikt. Als het globaal wordt gebruikt geen problemen.