Errore 'Cout è ambiguo' in C++

Errore Cout E Ambiguo In C



Questo articolo riguarda cout errori ambigui nel linguaggio di programmazione C++. La situazione ambigua si verifica quando il compilatore non è in grado di determinare i metodi o gli operatori da utilizzare su compiti diversi. A volte utilizziamo la stessa funzione parametrica con lo stesso spazio dei nomi e quindi cout è definito in entrambi i casi. Quando eseguiamo il programma, il compilatore genera l'errore ambiguo cout perché il compilatore non capisce quale significato mostra questo codice. L'ambiguità cout sorge quando esiste un conflitto tra gli spazi dei nomi definiti o più dichiarazioni di funzioni all'interno del programma.

Esempio 1:

Questo è un esempio di errore ambiguo cout che si verifica principalmente nella programmazione C++. Qui vedremo come il compilatore genera errori ambigui su cout quando utilizziamo più spazi dei nomi. Lo snippet di codice di questo esempio è menzionato di seguito:







#include

spazio dei nomi computer portatile {

vuoto Schermo ( ) {

standard :: cout << 'questo è lo spazio dei nomi del laptop' << standard :: fine ;

}

}

spazio dei nomi mobile {

vuoto Schermo ( ) {


standard :: cout << 'questo è lo spazio dei nomi mobile' << standard :: fine ;

}

}

int principale ( ) {

utilizzando spazio dei nomi computer portatile ;
utilizzando spazio dei nomi mobile ;

Schermo ( ) ;

ritorno 0 ;


}

Qui abbiamo preso un programma con due spazi dei nomi definiti in base alle nostre necessità. Vogliamo visualizzare le stringhe sullo schermo. L'output di questo codice è allegato di seguito:





All'esecuzione del codice, viene generato l'errore relativo a una situazione ambigua. L'errore viene generato perché quando il compilatore legge il codice, il compilatore non riceve un input chiaro dall'utente. Abbiamo utilizzato più dichiarazioni di namespace nel nostro codice. Nell'intero codice abbiamo utilizzato il metodo 'display' esclusivamente per visualizzare l'output sullo schermo. Il compilatore non ha idea di quale metodo di visualizzazione sia correlato a quale spazio dei nomi. Dobbiamo rendere il codice semplice e chiaro in modo che il compilatore comprenda facilmente i passaggi senza rendere il codice ambiguo.





La soluzione a questo errore è chiamare il metodo con uno spazio dei nomi correlato nella funzione principale affinché il compilatore possa comprenderlo meglio. Specifichiamo chiaramente quale metodo di namespace vogliamo chiamare nella nostra porzione di esecuzione principale.

#include

spazio dei nomi computer portatile {

vuoto Schermo ( ) {


standard :: cout << 'questo è lo spazio dei nomi del laptop' << standard :: fine ;

}

}

spazio dei nomi mobile {

vuoto Schermo ( ) {

standard :: cout << 'questo è lo spazio dei nomi mobile' << standard :: fine ;

}

}

int principale ( ) {

utilizzando spazio dei nomi computer portatile ;
utilizzando spazio dei nomi mobile ;
computer portatile :: Schermo ( ) ;
ritorno 0 ;


}

Qui possiamo semplicemente collegare il metodo display() con lo spazio dei nomi “laptop” nella funzione main come visto nello screenshot precedente. Ora esegui il programma. L'output viene visualizzato nella finestra della console.



Esempio 2:

Questo scenario è correlato all'errore ambiguo cout in C++. Il compilatore mostra un errore quando non comprende il flusso di esecuzione. Lo snippet di codice di questo esempio è allegato di seguito:

#include

spazio dei nomi Linguaggio C {

vuoto stampa ( int io ) {

standard :: cout << 'Spazio dei nomi del linguaggio C: ' << io << standard :: fine ;

}

}

spazio dei nomi Giava {

vuoto stampa ( int J ) {

standard :: cout << 'Spazio dei nomi del linguaggio Java: ' << J << standard :: fine ;

}

}

utilizzando spazio dei nomi Linguaggio C ;

utilizzando spazio dei nomi Giava ;

int principale ( ) {

stampa ( 5 ) ;
ritorno 0 ;


}

In questo codice definiamo tutte le intestazioni di libreria richieste. Creiamo due spazi dei nomi per scopi diversi. Nel namespace “Clingual”, definiamo un metodo “print” che prende il valore intero dall'utente. Nella funzione “stampa”, vogliamo mostrare il valore che l'utente ha passato sullo schermo della console. Visualizziamo l'output richiesto utilizzando il flusso 'cout' nel nostro codice. Successivamente, definiamo un altro spazio dei nomi il cui nome è “Java”.

In questo spazio dei nomi 'Java', utilizziamo nuovamente il metodo 'print' per visualizzare il valore che l'utente passa utilizzando 'cout'. Chiamiamo entrambi gli spazi dei nomi per l'utilizzo nella nostra funzione principale per ottenere l'output desiderato nella finestra della console in C++. Nella funzione 'main', chiamiamo la funzione sovraccaricata 'print()' per mostrare il valore passato sullo schermo della console.

Fare clic sull'opzione 'esegui' dal menu principale e selezionare l'opzione 'compila ed esegui'. L'errore sull'ambiguità si verifica durante l'esecuzione di questo codice. Lo screenshot dell'errore è allegato come segue:

Questo errore indica che il compilatore è confuso riguardo alla funzione print() sovraccarica che viene chiamata. Questo errore è alla riga 19, 'print (5)'. Il compilatore è confuso riguardo allo spazio dei nomi a cui appartiene questa funzione sovraccaricata. I principianti sono sempre bloccati in questo tipo di errori per la maggior parte del tempo.

Risolviamo questo errore che in realtà non è complesso. Gli errori ambigui sono facilmente risolvibili. Dobbiamo specificare lo spazio dei nomi lungo la funzione sovraccaricata nella funzione 'main' per la visibilità e la comprensione del compilatore. Come in questo programma, aggiungiamo questo 'java::print(5)' nel nostro codice esistente come menzionato di seguito:

#include

spazio dei nomi Linguaggio C {

vuoto stampa ( int io ) {

standard :: cout << 'Spazio dei nomi del linguaggio C: ' << io << standard :: fine ;

}

}

spazio dei nomi Giava {

vuoto stampa ( int J ) {

standard :: cout << 'Spazio dei nomi del linguaggio Java: ' << J << standard :: fine ;

}

}

utilizzando spazio dei nomi Linguaggio C ;

utilizzando spazio dei nomi Giava ;

int principale ( ) {

Giava :: stampa ( 5 ) ;
ritorno 0 ;


}

Ora, il programma viene eseguito perfettamente senza alcun errore ambiguo e visualizza l'output sullo schermo della console. L'output di questo programma è allegato di seguito:

Esempio 3:

Questo è l'ultimo ed ultimo esempio relativo ad un errore generato a causa di un problema ambiguo. Il compilatore non può ottenere il risultato corretto. Lo snippet di codice di questo esempio è allegato di seguito per una migliore comprensione da parte dell'utente:

Qui definiamo le librerie richieste. Successivamente, definiamo uno spazio dei nomi che contiene la classe in cui vogliamo visualizzare la stringa nella finestra della console. Chiamiamo questo spazio dei nomi definito nella funzione “main” con la variabile “c”. Successivamente, chiamiamo il metodo print() utilizzando un oggetto namespace. Visualizziamo nuovamente la stringa sullo schermo della console dopo la chiamata al metodo. L'output deve essere composto da entrambe le stringhe e viene visualizzato sullo schermo della console. Quando eseguiamo questo codice, l'errore si verifica come mostrato di seguito:

#include

utilizzando spazio dei nomi standard ;

spazio dei nomi miospazio dei nomi {

classe cout {
pubblico :
vuoto stampa ( ) {


cout << 'Conto personalizzato' << standard :: fine ;

}

} ;

}

int principale ( ) {

miospazio dei nomi :: cout C ;
C. stampa ( ) ;


cout << 'Ciao mondo!' << standard :: fine ;

ritorno 0 ;

}

Il compilatore non ha selezionato l'istruzione cout che visualizza i dati sullo schermo della console. Il compilatore non riesce a comprendere lo spazio dei nomi che appartiene all'istruzione cout e genera un errore. La soluzione a questo errore è aggiungere un oggetto dello spazio dei nomi con un'istruzione cout per la leggibilità e la comprensione del compilatore. Aggiungi 'std::' lungo l'istruzione cout ed esegui il codice. Sulla schermata della console viene visualizzato il seguente output:

Conclusione

In questo caso possiamo dire che anche la visualizzazione di un output sullo schermo della console genera un errore che non è un errore di sintassi né un errore logico. Nella maggior parte dei casi, l'utente scrive un buon senso del codice, ma non è comprensibile per il compilatore. Il compilatore è ambiguo riguardo all'input. Quindi, chiarisci ogni passaggio del codice con lo spazio dei nomi e la sintassi corretti per evitare errori nel linguaggio di programmazione C++. I passaggi coinvolti nella risoluzione di questo problema consistono nell'utilizzare qualificatori espliciti, nella prevenzione dei conflitti dello spazio dei nomi e nel garantire che le funzioni o gli oggetti previsti identifichino i passaggi coinvolti nella risoluzione di questo problema.