Errore C ++ Un riferimento per membri non statici deve essere relativo a un oggetto specifico

Errore C ++ Un riferimento per membri non statici deve essere relativo a un oggetto specifico
Oggi discuteremo di un errore che può verificarsi a causa della mancanza di pratica da parte di un programmatore quando mescoleranno il concetto di funzioni statiche e non statiche. Studiamo prima le funzioni dei membri non statici. Queste sono il tipo di funzioni dichiarate nell'area delle specifiche del membro di qualsiasi classe senza alcun specificatore statico. Per i membri non statici, esiste un metodo speciale per la dichiarazione. In C ++, se dobbiamo chiamare qualsiasi funzione da qualsiasi classe, possiamo chiamarla creando un oggetto. Se è il membro statico, verrà chiamato dai doppi punti “::” tra la classe e il nome della funzione come class_name :: func_name. Se è la funzione non statica, l'utilizzo di questo darà un errore che è "un errore che un riferimento per membri non statico deve essere relativo a un oggetto specifico".

A volte diventa frenetico affrontare questo tipo di errore quando i nuovi programmatori utilizzano una funzione non statica. Ma una volta che hanno familiarità con questo, diventa facile risolvere questi errori. Per risolvere questo errore ci sono due metodi. Il primo è quello di modificare la funzione in funzione statica e chiamarla semplicemente usando il metodo chiamante "class_name :: function_name". O il secondo metodo, cioè dobbiamo creare un oggetto di quella classe e quindi usare il nome dell'oggetto che possiamo chiamare la funzione mediante la funzione chiamata "class_object.Function_Name ".

Sintassi:

Non esiste una sintassi specificata per questo errore perché non fa parte del codice è l'errore di tempo di compilazione che può verificarsi a causa di bug nel codice.

Errore: funzione "funzione" non impossibile chiamare "senza oggetto

Quanto sopra mostrato è un'immagine di come appare l'errore.

Esempio # 01:

Ora eseguiremo un esempio per verificare come viene causato questo errore e come risolvere questo tipo di errore. Prima di passare al nostro codice principale, in cui si verifica l'errore, includeremo prima il file di intestazione "iostream" che viene utilizzato per consentirci di eseguire operazioni I/O. Successivamente, abbiamo creato un oggetto di classe chiamato "My_Object". All'interno di questa classe, abbiamo dichiarato un membro statico chiamato "Display ()" e anche una funzione membro non statica "Show ()".

Al di fuori della classe, abbiamo chiamato entrambe le funzioni usando la classe "my_object". All'interno della funzione del membro Display (), abbiamo stampato il messaggio di esecuzione per il metodo Display (). E nel metodo show (), abbiamo incaricato il compilatore di stampare il messaggio di esecuzione per il metodo show (). Dirigendoci verso la nostra funzione principale, dove chiameremo entrambe le funzioni usando il metodo di chiamata del membro statico che è il nome della classe, quindi i doppi punti insieme al nome del metodo. Nel nostro caso, sembra "my_object :: display ();". Abbiamo chiamato la nostra funzione show () e restituito il valore null, ora eseguiremo il codice.

#includere
Utilizzo dello spazio dei nomi std;
class my_object
pubblico:
Display void statico ();
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 ();
restituzione 0;

Dopo aver eseguito il nostro codice, abbiamo riscontrato questo errore visualizzato sulla riga "21" in cui abbiamo chiamato il nostro metodo "show ()". L'errore che è stato riscontrato è dovuto alla chiamata della funzione perché è un membro non statico e lo abbiamo chiamato usando il metodo della chiamata del membro statico. Ora risolveremo questo errore utilizzando il modo accurato per chiamare la funzione non statica.

Come mostrato nello snippet di seguito, abbiamo sostituito la chiamata di funzione con quella corretta creando prima un oggetto a quella classe. Quindi, usando questo oggetto, abbiamo chiamato la funzione in riferimento a quell'oggetto "OBJ". Ora eseguiamo di nuovo il codice.

Dopo aver nuovamente eseguito il codice, abbiamo visualizzato correttamente i messaggi di entrambe le funzioni come possiamo vedere nella figura in basso questo tempo non è stato visualizzato alcun errore.

Esempio # 02:

Ora implementeremo un altro esempio in cui creeremo una funzione non statica in cui eseguiremo un calcolo. Dopo aver incluso il nostro file di intestazione, creeremo una classe denominata "Myclass" in cui abbiamo dichiarato un membro statico chiamato "my_func ()" e un membro non statico "Add ()". Al di fuori di quella classe, abbiamo chiamato entrambe le funzioni. Nella funzione ADD (), eseguiremo l'aggiunta di due variabili intera "A" e "B" a cui abbiamo assegnato i valori "2" e "3" e li archiviamo in una variabile intera "C". Alla fine, usando l'istruzione "cout", stamperemo la somma di entrambi i valori. Nella seconda funzione my_func (), visualizzeremo semplicemente il messaggio da quale funzione viene visualizzata. Ora, immergendoti nella nostra funzione principale in cui utilizzando la chiamata del metodo statico, chiameremo entrambe le funzioni. Dopo aver chiamato questi metodi, eseguiremo il codice.

#includere
Utilizzo dello spazio dei nomi std;
Classe Myclass

pubblico:
static int my_func ();
void add ();
;
void myclass :: aggiungi ()

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;
restituzione 0;

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

Di seguito è riportato il messaggio di errore visualizzato nella nostra porzione di output che indica che esiste una chiamata di funzione errata sulla riga 22 per il metodo MyClass :: Add () che è stato chiamato senza creare un oggetto per quella classe. Come abbiamo discusso in precedenza, non possiamo chiamare un membro non statico senza creare un oggetto. Ora proveremo a risolvere questo errore.

Nella cifra data, abbiamo scritto il modo corretto di chiamare un membro non statico. Abbiamo prima creato un oggetto per la classe di cui verrà chiamata la funzione. Abbiamo dichiarato l'oggetto "obj" per "myclass" con il riferimento di cui chiameremo quella funzione. Dopo aver creato l'oggetto, abbiamo chiamato la funzione usando la funzione chiamata "OBJ.Aggiungi () "e quindi eseguire il codice.

Dopo l'esecuzione del codice, abbiamo calcolato correttamente l'aggiunta delle variabili che abbiamo eseguito nel metodo "add ()" e visualizzato il risultato usando la variabile "C" che mantiene il valore di restituzione dell'aggiunta.

Conclusione

In questa guida, abbiamo studiato l'errore di tempo di compilazione che si verifica principalmente a causa della funzione di funzione della funzione del membro non statico. Questo errore si verifica principalmente a causa dell'idea sbagliata del programmatore sui membri non statici. Abbiamo spiegato il modo per risolvere questi errori implementando più esempi.