Errore C++: No Viable Overloaded '=':

Errore C No Viable Overloaded



Gli errori sono le operazioni che possono essere il risultato del funzionamento anomalo di qualsiasi codice. L'errore non può essere rilevato al momento della scrittura finché non abbiamo eseguito il codice o non è stato compilato. Alcuni errori impediscono l'esecuzione del codice finché non vengono rimossi. Oggi parleremo anche di un errore che si verifica anche durante la compilazione del programma, ovvero “error: no match for ‘operator=’”. Questo errore può essere causato da motivi come: se abbiamo passato il puntatore dove deve essere passata la stringa, modificando la variabile costante, ecc. Non è difficile rimuovere l'errore 'no viable overload' ma il compito principale è quello di capire l'errore perché mostra solo l'errore senza alcuna descrizione dell'errore.

Sintassi

Non esiste una sintassi predefinita per questo errore perché non fa parte del codice o dell'output, è solo un'ambiguità che potrebbe essere causata dal codice errato. Come possiamo vedere, di seguito è riportato un esempio di come potrebbe apparire l'errore.







errore : nessuna corrispondenza per 'operatore = '

Esempio n. 01:

Diamoci un'idea di questo errore e del metodo per risolverlo. Per capirlo meglio, eseguiremo un esempio in cui passeremo i nomi utilizzando gli oggetti alla funzione e quindi li visualizzerà. Per prima cosa includeremo il file di intestazione iostream. Successivamente, dichiareremo una classe denominata 'my_object'. All'interno delle quali abbiamo dichiarato due variabili stringa denominate “F_name e “L_name”, la “F_name” che indica il nome della persona dove la “L_name” indica il cognome della persona.



Successivamente, abbiamo dichiarato un costruttore pubblico denominato 'my_object()' in cui abbiamo assegnato valori null a entrambe le variabili 'F_name' e 'L_name'. Successivamente, abbiamo dichiarato un'altra funzione alla quale abbiamo passato le variabili di tipo stringa “fn” e “ln”. Al suo interno, abbiamo chiamato il metodo name_set(). Quindi, abbiamo dichiarato due funzioni membro 'show()' e 'name_set()'. Quando viene chiamata la funzione “show(), visualizzerà insieme i nomi e i cognomi. Considerando che, nella funzione membro 'set_name ()', abbiamo passato due variabili stringa di tipo stringa 'fn' e 'ln' che abbiamo passato anche al secondo costruttore.



Ora, utilizzando l'operatore di assegnazione di copia della classe my_object, prendiamo un parametro di tipo 'my_object'. Il compilatore lo dichiara sempre come membro pubblico inline di qualsiasi classe. All'interno di questo membro, abbiamo assegnato src.F_name a “F_name” e src.L_name a “L_name” che abbiamo conservato la copia di “F_name” e “L_name”. Questo viene passato ai membri della classe my_object. Ora abbiamo dichiarato un oggetto della classe my_cobject denominato “name1” al quale abbiamo passato come argomento due stringhe “Anna” e “smith”. Questo chiamerà il costruttore e visualizzerà il nome insieme al cognome.





Successivamente, abbiamo creato un altro oggetto 'name2' e quindi assegnato il nome a quell'oggetto separatamente. Dopo aver passato i valori al costruttore per entrambi gli oggetti, abbiamo chiamato il metodo show() che visualizzerà quindi i nomi di entrambi gli oggetti 'nam1' e 'name2'. Alla fine del codice, abbiamo restituito il valore null ed eseguito il nostro codice.

includere
classe mio_oggetto {
privato :
standard :: corda F_nome, L_nome ;
pubblico :
mio_oggetto ( ) { F_nome = ' ' ; L_nome = ' ' ; }
mio_oggetto ( standard :: corda fn, standard :: corda ln ) {
set_nome ( fn, ln ) ;
}
vuoto mostrare ( ) { standard :: cout << 'Il nome è ' << F_nome << ' ' << L_nome << '. \n ' ; }
vuoto set_nome ( standard :: corda fn, standard :: corda ln ) { F_nome = fn ; L_nome = ln ; }
mio_oggetto & operatore = ( cost mio_oggetto & src ) {
F_nome = src. F_nome ;
L_nome = src. L_nome ;
Restituzione * questo ;
}

} ;
int principale ( int argc, char ** arv ) {
mio_nome oggetto1 ( 'Anna' , 'fabbro' ) ;
mio_nome oggetto2 ;
nome2 = ( 'Anna' , 'fabbro' ) ;
nome1. mostrare ( ) ;
nome2. mostrare ( ) ;
Restituzione 0 ;
}

Dopo l'esecuzione del nostro codice, abbiamo questo errore che mostra che abbiamo scritto il codice sbagliato sulla riga 24 che indica il tipo di errore riscontrato 'errore: nessuna corrispondenza per 'operator=''. Ora proveremo a risolvere questo errore.



Per risolvere questo errore, abbiamo diversi modi per passare i valori al costruttore di qualsiasi classe. Nel primo metodo, assegneremo semplicemente l'oggetto 'nome1' al 'nome2' perché abbiamo passato gli stessi valori a entrambi gli oggetti, quindi non è necessario passarli separatamente. Ora eseguiamo il codice.

int principale ( int argc, char ** arv ) {

mio_nome oggetto1 ( 'Anna' , 'fabbro' ) ;
mio_nome oggetto2 ;
nome2 = nome1 ;
nome1. mostrare ( ) ;
nome2. mostrare ( ) ;

Dopo aver apportato modifiche al codice come mostrato sopra, abbiamo il risultato riportato nello snippet sottostante. Abbiamo visualizzato il nome passato al costruttore viene visualizzato correttamente senza alcun errore.

Il secondo metodo per risolvere questo errore è quando dobbiamo passare i diversi valori a entrambi gli oggetti. Useremo semplicemente il nome della classe insieme ai valori che devono essere passati al costruttore come argomento. Abbiamo passato il nome “jhone” e il secondo nome “smith”. Quindi, abbiamo eseguito il codice.

int principale ( int argc, char ** arv ) {

mio_nome oggetto1 ( 'Anna' , 'fabbro' ) ;
mio_nome oggetto2 ;
nome2 = mio_oggetto ( 'John Smith' ) ;

nome1. mostrare ( ) ;
nome2. mostrare ( ) ;

Dopo aver eseguito il codice sopra aggiunto, abbiamo l'output come mostrato di seguito. Per l'oggetto “name1”, mostrava il nome “Anna smith” e per il secondo oggetto “name2” mostrava “Jhone Smith”. Ma questa volta il nostro codice ha funzionato correttamente senza errori.

Ora proveremo un altro metodo per eseguire correttamente il nostro codice. Come nei casi precedenti, abbiamo cercato di assegnare i valori agli oggetti utilizzando l'operatore di assegnazione. Ma questa volta passeremo i valori al momento della dichiarazione dell'oggetto. Come possiamo vedere nello snippet sottostante, al momento della dichiarazione di un oggetto “nome1”, abbiamo passato i valori come argomento all'oggetto ripetendo lo stesso passaggio per il “nome2”. Ora eseguiamo nuovamente il codice.

int principale ( int argc, char ** arv ) {
mio_nome oggetto1 ( 'Anna' , 'fabbro' ) ;
mio_nome oggetto2 ( 'John Smith' ) ;
nome1. mostrare ( ) ;
nome2. mostrare ( ) ;

Dopo che il codice è stato eseguito anche per questo tempo, non abbiamo riscontrato alcun errore, il che significa che questo ci impedirà anche di avere errori.

Conclusione

Abbiamo discusso brevemente di un errore che potremmo incontrare mentre lavoriamo su funzioni a cui si accede dalle classi. Abbiamo anche studiato le cause e le modalità per risolvere l'errore “no viabili in sovraccarico”. Per lo più questo errore è difficile da capire per i nuovi programmatori, quindi abbiamo cercato di semplificare la loro eliminazione implementando esempi e anche con la sua spiegazione.