Hva er ikke-deklarerte identifikatorfeil? Hva er vanlige årsaker, og hvordan løser jeg dem?
Eksempler på feiltekster:
'cout' undeclared (første gangs bruk i denne funksjonen)
De kommer oftest fra å glemme å inkludere headerfilen som inneholder funksjonsdeklarasjonen, for eksempel vil dette programmet gi en 'undeclared identifier' -feil:
int main() {
std::cout << "Hello world!" << std::endl;
return 0;
}
For å fikse det, må vi inkludere overskriften:
#include <iostream>
int main() {
std::cout << "Hello world!" << std::endl;
return 0;
}
Hvis du skrev overskriften og inkluderte den riktig, kan overskriften inneholde feil include guard.
For å lese mer, se http://msdn.microsoft.com/en-us/library/aa229215(v=vs.60).aspx.
En annen vanlig kilde til nybegynnerfeil er feilstaving av en variabel:
int main() {
int aComplicatedName;
AComplicatedName = 1; /* mind the uppercase A */
return 0;
}
For eksempel vil denne koden gi en feil, fordi du må bruke std::string
:
#include <string>
int main() {
std::string s1 = "Hello"; // Correct.
string s2 = "world"; // WRONG - would give error.
}
void f() { g(); }
void g() { }
g
har ikke blitt deklarert før første gangs bruk. For å fikse det, flytt enten definisjonen av g
før f
:
void g() { }
void f() { g(); }
eller legge til en deklarasjon av g
før f
:
void g(); // declaration
void f() { g(); }
void g() { } // definition
Dette er Visual Studio-spesifikt. I VS må du legge til `#include "stdafx.h" før noen kode. Kode før den ignoreres av kompilatoren, så hvis du har dette:
#include <iostream>
#include "stdafx.h"
#include <iostream>
vil bli ignorert. Du må flytte den nedenfor:
#include "stdafx.h"
#include <iostream>
Rediger gjerne dette svaret.
I C og C++ må alle navn deklareres før de brukes. Hvis du prøver å bruke navnet på en variabel eller en funksjon som ikke er deklarert, vil du få en "undeclared identifier"-feil.
Funksjoner er imidlertid et spesialtilfelle i C (og bare i C) ved at du ikke trenger å erklære dem først. C-kompilatoren vil anta at funksjonen eksisterer med antall og type argumenter som i anropet. Hvis den faktiske funksjonsdefinisjonen ikke samsvarer med dette, vil du få en annen feil. Dette spesialtilfellet for funksjoner finnes ikke i C++.
Du løser denne typen feil ved å sørge for at funksjoner og variabler er deklarert før de brukes. Når det gjelder printf
må du inkludere headerfilen <stdio.h>
(eller <cstdio>
i C++).
For standardfunksjoner anbefaler jeg at du sjekker f.eks. dette referansesiden, og søker etter funksjonene du vil bruke. Dokumentasjonen for hver funksjon forteller deg hvilken header-fil du trenger.
Det er som å bruke funksjonen uten å deklarere den. <stdio.h> headerfilen vil inneholde funksjonen funksjonen printf(). Inkluder toppfilen i programmet ditt, dette er løsningen for det. Noen brukerdefinerte funksjoner kan også gi feil når de ikke er deklarert før de brukes. Hvis den brukes globalt er det ingen problemer.