'Cout er tvetydig'-feil i C++

Cout Er Tvetydig Feil I C



Denne artikkelen er bekymret for tvetydige feil i C++-programmeringsspråket. Den tvetydige situasjonen oppstår når kompilatoren ikke kan bestemme metodene eller operatørene som skal brukes på forskjellige oppgaver. Noen ganger bruker vi den samme parameterfunksjonen med samme navneområde, og da er cout definert i begge tilfeller. Når vi kjører programmet, genererer kompilatoren cout tvetydig feil fordi kompilatoren ikke forstår hvilken betydning denne koden viser. Cout-tvetydigheten oppstår når det eksisterer en konflikt mellom de definerte navnerommene eller flere funksjonserklæringer inne i programmet.

Eksempel 1:

Dette er et eksempel på en cout tvetydig feil som for det meste oppstår i C++ programmering. Her vil vi se hvordan kompilatoren genererer de tvetydige feilene på cout når vi bruker flere navneområder. Kodebiten til dette eksemplet er nevnt i følgende:







#include

navneområde laptop {

tomrom vise ( ) {

std :: cout << 'dette er bærbar navneområde' << std :: endl ;

}

}

navneområde mobil {

tomrom vise ( ) {


std :: cout << 'dette er mobilt navneområde' << std :: endl ;

}

}

int hoved- ( ) {

ved hjelp av navneområde laptop ;
ved hjelp av navneområde mobil ;

vise ( ) ;

komme tilbake 0 ;


}

Her tok vi et program med to navneområder som er definert etter vårt behov. Vi ønsker å vise strengene på skjermen. Utdataene fra denne koden er vedlagt i følgende:





Ved kjøring av kode genereres feilen om en tvetydig situasjon. Feilen genereres fordi når kompilatoren leser koden, får ikke kompilatoren et tydelig input fra brukerenden. Vi brukte flere navneområdedeklarasjoner i koden vår. I hele koden brukte vi 'display' -metoden utelukkende for å vise utdataene på skjermen. Kompilatoren har ingen anelse om hvilken visningsmetode som er relatert til hvilket navneområde. Vi må gjøre koden enkel og tydelig slik at kompilatoren enkelt forstår trinnene uten å gjøre koden tvetydig.





Løsningen på denne feilen er å kalle metoden med et relatert navneområde i hovedfunksjonen for at kompilatoren skal ha mer forståelse. Vi spesifiserer tydelig hvilken metode for navneområde vi ønsker å kalle i hovedutførelsesdelen.

#include

navneområde laptop {

tomrom vise ( ) {


std :: cout << 'dette er bærbar navneområde' << std :: endl ;

}

}

navneområde mobil {

tomrom vise ( ) {

std :: cout << 'dette er mobilt navneområde' << std :: endl ;

}

}

int hoved- ( ) {

ved hjelp av navneområde laptop ;
ved hjelp av navneområde mobil ;
laptop :: vise ( ) ;
komme tilbake 0 ;


}

Her kan vi bare koble display()-metoden med 'laptop'-navneområdet i hovedfunksjonen som vist i forrige skjermbilde. Kjør programmet nå. Utdataene vises i konsollvinduet.



Eksempel 2:

Dette scenariet er relatert til cout tvetydig feil i C++. Kompilatoren viser en feil når den ikke forstår utførelsesflyten. Kodebiten til dette eksemplet er vedlagt i følgende:

#include

navneområde Språk {

tomrom skrive ut ( int Jeg ) {

std :: cout << 'Navneområde for C-språk: ' << Jeg << std :: endl ;

}

}

navneområde java {

tomrom skrive ut ( int j ) {

std :: cout << 'Navneområde for java-språk: ' << j << std :: endl ;

}

}

ved hjelp av navneområde Språk ;

ved hjelp av navneområde java ;

int hoved- ( ) {

skrive ut ( 5 ) ;
komme tilbake 0 ;


}

I denne koden definerer vi alle de nødvendige bibliotekhodene. Vi lager to navneområder for forskjellige formål. I 'Clanguage'-navneområdet definerer vi en 'print'-metode som tar heltallsverdien fra brukeren. I 'print'-funksjonen ønsker vi å vise verdien som brukeren ga på konsollskjermen. Vi viser den nødvendige utgangen ved å bruke 'cout'-strømmen i koden vår. Etter det definerer vi et annet navneområde hvis navn er 'Java'.

I dette 'Java'-navnerommet bruker vi 'print'-metoden igjen for å vise verdien som brukeren sender ved å bruke 'cout'. Vi kaller begge navnerommene for bruk i hovedfunksjonen vår for å få ønsket utgang på konsollvinduet i C++. I 'hoved'-funksjonen kaller vi 'print()'-overbelastet funksjon for å vise den beståtte verdien på konsollskjermen.

Klikk på 'utfør'-alternativet fra hovedmenyen og velg alternativet 'kompiler og kjør'. Feilen om tvetydighet oppstår ved denne kodeutførelsen. Skjermbildet for feilen er vedlagt som følger:

Denne feilen indikerer at kompilatoren er forvirret om den overbelastede print()-funksjonen som kalles. Denne feilen er på linje 19,  «print (5)». Kompilatoren er forvirret om navneområdet som denne overbelastede funksjonen tilhører. Nybegynnere sitter alltid fast i denne typen feil mesteparten av tiden.

La oss løse denne feilen som ikke er kompleks i virkeligheten. De tvetydige feilene løses enkelt. Vi må spesifisere navneområdet langs den overbelastede funksjonen i 'hoved'-funksjonen for kompilatorsynlighet og forståelse. Som i dette programmet legger vi til denne 'java::print(5)' i vår eksisterende kode som nevnt i følgende:

#include

navneområde Språk {

tomrom skrive ut ( int Jeg ) {

std :: cout << 'Navneområde for C-språk: ' << Jeg << std :: endl ;

}

}

navneområde java {

tomrom skrive ut ( int j ) {

std :: cout << 'Navneområde for java-språk: ' << j << std :: endl ;

}

}

ved hjelp av navneområde Språk ;

ved hjelp av navneområde java ;

int hoved- ( ) {

java :: skrive ut ( 5 ) ;
komme tilbake 0 ;


}

Nå utføres programmet perfekt uten noen tvetydig feil og viser utdataene på konsollskjermen. Utdataene fra dette programmet er vedlagt i følgende:

Eksempel 3:

Dette er det siste og siste eksemplet relatert til en feil som er generert på grunn av et tvetydig problem. Kompilatoren kan ikke få riktig resultat. Kodebiten til dette eksemplet er vedlagt i det følgende for brukerens bedre forståelse:

Her definerer vi de nødvendige bibliotekene. Etter det definerer vi et navneområde som inneholder klassen der vi ønsker å vise strengen i konsollvinduet. Vi kaller dette definerte navneområdet i 'hoved'-funksjonen med 'c'-variabelen. Etter det kaller vi print()-metoden ved å bruke et navneområdeobjekt. Vi viser strengen igjen på konsollskjermen etter metodekallet. Utgangen må være både strenger og vises på konsollskjermen. Når vi kjører denne koden, oppstår feilen som vist i følgende:

#include

ved hjelp av navneområde std ;

navneområde mitt navneområde {

klasse cout {
offentlig :
tomrom skrive ut ( ) {


cout << 'Egendefinert utforming' << std :: endl ;

}

} ;

}

int hoved- ( ) {

mitt navneområde :: cout c ;
c. skrive ut ( ) ;


cout << 'Hei Verden!' << std :: endl ;

komme tilbake 0 ;

}

Kompilatoren valgte ikke cout-setningen som viser dataene på konsollskjermen. Kompilatoren kan ikke forstå navneområdet som tilhører cout-setningen og genererer en feil. Løsningen på denne feilen er å legge til et navneområdeobjekt med en cout-setning for kompilatorlesbarhet og forståelse. Legg til 'std::' langs cout-setningen og kjør koden. Følgende utgang vises på konsollskjermen:

Konklusjon

Her kan vi si at visning av en utgang på konsollskjermen også genererer en feil som ikke er en syntaksfeil eller en logisk feil. Mesteparten av tiden skriver brukeren en god følelse av kode, men det er ikke forståelig for kompilatoren. Kompilatoren er tvetydig om input. Så klargjør hvert kodetrinn med riktig navneavstand og syntaks for å unngå feil i C++-programmeringsspråket. Trinnene som er involvert i å løse dette problemet, er å bruke eksplisitte kvalifikatorer, forhindre navneområdesammenstøt og å sikre at de tiltenkte funksjonene eller objektene identifiserte trinnene som er involvert i å løse dette problemet.