C ++ Feil En ikke -statlig medlemsreferanse må være i forhold til et spesifikt objekt

C ++ Feil En ikke -statlig medlemsreferanse må være i forhold til et spesifikt objekt
I dag vil vi diskutere en feil som kan oppstå på grunn av mangel på praksis av en programmerer når de blander konseptet statiske og ikke-statiske funksjoner. La oss først studere ikke-statiske medlemsfunksjoner. Dette er den typen funksjoner som er erklært i medlemspesifikasjonsområdet i en hvilken som helst klasse uten statisk spesifikasjon. For de ikke-statiske medlemmene er det en spesiell metode for erklæringen. I C ++, hvis vi trenger å ringe noen funksjon fra hvilken som helst klasse, kan vi kalle det ved å lage et objekt. Hvis det er det statiske medlemmet, vil det bli kalt av Double Colons “::” mellom klassen og funksjonsnavnet som Class_name :: Func_name. Hvis det er den ikke-statiske funksjonen, må bruk av denne gi en feil som er "feil en ikke-statisk medlemsreferanse må være i forhold til et spesifikt objekt".

Noen ganger blir det hektisk å takle denne typen feil når de nye programmererne bruker en ikke-statisk funksjon. Men når de først blir kjent med dette, blir det enkelt å løse disse feilene. For å løse denne feilen er det to metoder. Den første er å endre funksjonen til den statiske funksjonen og kalle den ved å bruke den anropsmetoden “class_name :: funksjon_name”. Eller den andre metoden, det vil si at vi må lage et objekt i den klassen og deretter bruke objektnavnet vi kan kalle funksjonen etter funksjonen som kalles “class_object.funksjonsnavn ”.

Syntaks:

Det er ingen spesifisert syntaks for denne feilen fordi den ikke er en del av koden, det er sammenstillingstidsfeilen som kan oppstå på grunn av feil i koden.

Feil: Kan ikke ringe medlemsfunksjonen 'funksjon' uten objekt

Ovennevnte er et bilde av hvordan feilen ser ut.

Eksempel # 01:

Nå vil vi utføre et eksempel for å sjekke hvordan denne feilen er forårsaket og hvordan vi kan løse denne typen feil. Før vi flytter til hovedkoden vår, der feilen oppstår, vil vi først inkludere overskriftsfilen “IOSTREAM” som brukes til å gjøre det mulig. Etter det opprettet vi et klasseobjekt som heter “my_object”. Inne i denne klassen erklærte vi et statisk medlem som heter “Display ()” og også en ikke-statisk medlemsfunksjon “show ()”.

Utenfor klassen har vi kalt begge funksjonene ved å bruke klassen “my_object”. Inne. Og i Show () -metoden har vi instruert kompilatoren om å skrive ut utførelsesmeldingen for Show () -metoden. På vei mot hovedfunksjonen vår, hvor vi vil kalle begge funksjonene ved å bruke den statiske medlemmets anropsmetode som er navnet på klassen, så doble kolonene sammen med metodens navn. I vårt tilfelle ser det ut som "my_object :: display ();". Vi kalte vår show () -funksjon og returnerte nullverdien, vi vil nå utføre koden.

#inkludere
ved hjelp av navneområdet STD;
klasse my_object
offentlig:
statisk tomrom ();
void show ();
;
void my_object :: display ()
cout << "display() method executed" << endl;

void my_object :: show ()
cout << "Show() method executed" << endl;

int main ()
my_object :: display ();
my_object :: show ();
retur 0;

Etter å ha utført koden vår, møtte vi denne feilen vist på linje “21” der vi kalte “show ()” -metoden. Feilen som ble oppstått skyldes funksjonsanropet fordi det er et ikke-statisk medlem, og vi kalte den ved hjelp av den statiske medlemmets anropemetode. Nå vil vi løse denne feilen ved å bruke den nøyaktige måten å kalle den ikke-statiske funksjonen.

Som vist i utdraget nedenfor, har vi erstattet funksjonssamtalen med riktig ved først å lage et objekt til den klassen. Deretter, ved å bruke dette objektet, kalte vi funksjonen med henvisning til det objektet "OBJ". Nå utfører vi koden igjen.

Etter å ha utført koden igjen, viste vi med hell begge funksjonene som vi kan se i figuren nedenfor denne gangen ingen feil er vist.

Eksempel # 02:

Nå vil vi implementere et annet eksempel der vi vil lage en ikke-statisk funksjon der vi skal utføre en beregning. Etter å ha inkludert overskriftsfilen vår, vil vi lage en klasse som heter “MyClass” der vi erklærte et statisk medlem som heter “My_Func ()” og et ikke-statisk medlem “Add ()”. Utenfor den klassen kalte vi begge funksjonene. I ADD () -funksjonen vil vi utføre tillegg av to heltallvariabler “A” og “B” som vi tildelte verdiene “2” og “3” og lagrer dem i en heltallvariabel “C”. På slutten, ved å bruke "cout" -uttalelsen, vil vi skrive ut summen av begge verdiene. I den andre funksjonen my_func () vil vi ganske enkelt vise meldingen som funksjonen den vises. Nå, dykking i hovedfunksjonen vår der vi bruker den statiske metodesamtalen, vil vi kalle begge funksjonene. Etter å ha ringt disse metodene, vil vi utføre koden.

#inkludere
ved hjelp av navneområdet STD;
klasse Myclass

offentlig:
statisk int my_func ();
void add ();
;
void MyClass :: Legg til ()

int a = 2, b = 3;
int c = a+b;
std :: cout <<"the sum of a and b is: "<< c << std::endl;

int myclass :: my_func ()

std :: cout << "this is my_func() method" << std::endl;
retur 0;

int main ()
MyClass :: my_func ();
MyClass :: add ();

Nedenfor er feilmeldingen som vises i vår utgangsdel som indikerer at det er en feil funksjonsanrop på linje 22 for MyClass :: Add () -metoden som har blitt kalt uten å lage et objekt for den klassen. Som vi diskutert ovenfor, kan vi ikke ringe et ikke-statisk medlem uten å opprette et objekt. Vi vil nå prøve å løse denne feilen.

I den gitte figuren har vi skrevet den riktige måten å ringe et ikke-statisk medlem. Vi opprettet først et objekt for klassen som funksjonen vil bli kalt. Vi erklærte objektet “OBJ” for “MyClass” med referansen som vi vil kalle den funksjonen. Etter å ha opprettet objektet, kalte vi funksjonen ved å bruke funksjonen som ble kalt “OBJ.Legg til () ”og utfør deretter koden.

Etter utførelsen av koden beregnet vi med hell tilsetningen av variablene som vi har utført i “add ()” -metoden og vist resultatet ved å bruke variabelen “C” som holder returverdien til tillegget.

Konklusjon

I denne guiden har vi studert kompileringstidsfeilen som for det meste oppstår på grunn av funksjonsanropet til den ikke-statiske medlemsfunksjonen. Denne feilen oppstår for det meste på grunn av misoppfatningen av koderen om ikke-statiske medlemmer. Vi forklarte måten å løse disse feilene ved å implementere flere eksempler på.