'Cout är tvetydig'-fel i C++

Cout Ar Tvetydig Fel I C



Den här artikeln är bekymrad över tvetydiga fel i programmeringsspråket C++. Den tvetydiga situationen uppstår när kompilatorn inte kan bestämma vilka metoder eller operatörer som ska användas för olika uppgifter. Ibland använder vi samma parameterfunktion med samma namnutrymme, och då definieras cout i båda fallen. När vi kör programmet genererar kompilatorn cout tvetydigt fel eftersom kompilatorn inte förstår vilken betydelse den här koden visar. Cout-tvetydigheten uppstår när det finns en konflikt mellan de definierade namnrymden eller flera deklarationer av funktioner i programmet.

Exempel 1:

Detta är ett exempel på ett tvetydigt cout-fel som oftast förekommer i C++-programmering. Här kommer vi att se hur kompilatorn genererar de tvetydiga felen på cout när vi använder flera namnutrymmen. Kodavsnittet i detta exempel nämns i följande:







#include

namnutrymme bärbar dator {

tomhet visa ( ) {

std :: cout << 'det här är bärbar dators namnområde' << std :: endl ;

}

}

namnutrymme mobil {

tomhet visa ( ) {


std :: cout << 'det här är mobilt namnutrymme' << std :: endl ;

}

}

int huvud ( ) {

använder sig av namnutrymme bärbar dator ;
använder sig av namnutrymme mobil ;

visa ( ) ;

lämna tillbaka 0 ;


}

Här tog vi ett program med två namnutrymmen som är definierade efter vårt behov. Vi vill visa strängarna på skärmen. Utdata från denna kod bifogas i följande:





Vid kodexekvering genereras felet om en tvetydig situation. Felet genereras för att när kompilatorn läser koden får kompilatorn ingen tydlig indata från användarens slut. Vi använde flera namnområdesdeklarationer i vår kod. I hela koden använde vi 'display' -metoden enbart för att visa utdata på skärmen. Kompilatorn har ingen aning om vilken visningsmetod som är relaterad till vilket namnområde. Vi måste göra koden enkel och tydlig så att kompilatorn enkelt förstår stegen utan att göra koden tvetydig.





Lösningen på detta fel är att anropa metoden med ett relaterat namnområde i huvudfunktionen för att kompilatorn ska ha mer förståelse. Vi anger tydligt vilken metod för namnutrymme vi vill anropa i vår huvudexekveringsdel.

#include

namnutrymme bärbar dator {

tomhet visa ( ) {


std :: cout << 'det här är bärbar dators namnområde' << std :: endl ;

}

}

namnutrymme mobil {

tomhet visa ( ) {

std :: cout << 'det här är mobilt namnutrymme' << std :: endl ;

}

}

int huvud ( ) {

använder sig av namnutrymme bärbar dator ;
använder sig av namnutrymme mobil ;
bärbar dator :: visa ( ) ;
lämna tillbaka 0 ;


}

Här kan vi bara länka display()-metoden med 'laptop'-namnrymden i huvudfunktionen som ses i föregående skärmdump. Kör nu programmet. Utdata visas i konsolfönstret.



Exempel 2:

Det här scenariot är relaterat till det oklara felet i C++. Kompilatorn visar ett fel när den inte förstår exekveringsflödet. Kodavsnittet i detta exempel bifogas i följande:

#include

namnutrymme Clanguage {

tomhet skriva ut ( int i ) {

std :: cout << 'Namnområde för C-språk: ' << i << std :: endl ;

}

}

namnutrymme java {

tomhet skriva ut ( int j ) {

std :: cout << 'Namnområde för java-språk: ' << j << std :: endl ;

}

}

använder sig av namnutrymme Clanguage ;

använder sig av namnutrymme java ;

int huvud ( ) {

skriva ut ( 5 ) ;
lämna tillbaka 0 ;


}

I den här koden definierar vi alla nödvändiga biblioteksrubriker. Vi skapar två namnutrymmen för olika ändamål. I namnområdet 'Clanguage' definierar vi en 'print'-metod som tar heltalsvärdet från användaren. I 'print'-funktionen vill vi visa värdet som användaren skickade på konsolskärmen. Vi visar den nödvändiga utgången med 'cout' -strömmen i vår kod. Efter det definierar vi ett annat namnområde vars namn är 'Java'.

I detta 'Java'-namnutrymme använder vi 'print'-metoden igen för att visa värdet som användaren skickar med 'cout'. Vi kallar båda namnområdena för användning i vår huvudfunktion för att få önskad utdata på konsolfönstret i C++. I 'main'-funktionen anropar vi den 'print()'-överbelastade funktionen för att visa det godkända värdet på konsolskärmen.

Klicka på alternativet 'kör' från huvudmenyn och välj alternativet 'kompilera och kör'. Felet om tvetydighet uppstår vid denna kodexekvering. Felskärmdumpen bifogas enligt följande:

Det här felet indikerar att kompilatorn är förvirrad angående den överbelastade print()-funktionen som anropas. Det här felet finns på rad 19,  'print (5)'. Kompilatorn är förvirrad angående namnutrymmet som denna överbelastade funktion tillhör. Nybörjare har alltid fastnat i den här typen av fel för det mesta.

Låt oss lösa detta fel som inte är komplext i verkligheten. De tvetydiga felen är lätta att lösa. Vi måste ange namnutrymmet längs den överbelastade funktionen i 'huvud'-funktionen för kompilatorns synlighet och förståelse. Som i det här programmet lägger vi till denna 'java::print(5)' i vår befintliga kod som nämns i följande:

#include

namnutrymme Clanguage {

tomhet skriva ut ( int i ) {

std :: cout << 'Namnområde för C-språk: ' << i << std :: endl ;

}

}

namnutrymme java {

tomhet skriva ut ( int j ) {

std :: cout << 'Namnområde för java-språk: ' << j << std :: endl ;

}

}

använder sig av namnutrymme Clanguage ;

använder sig av namnutrymme java ;

int huvud ( ) {

java :: skriva ut ( 5 ) ;
lämna tillbaka 0 ;


}

Nu körs programmet perfekt utan några tvetydiga fel och visar resultatet på konsolskärmen. Resultatet av detta program bifogas i följande:

Exempel 3:

Detta är det sista och sista exemplet relaterat till ett fel som genereras på grund av ett tvetydigt problem. Kompilatorn kan inte få rätt resultat. Kodavsnittet i detta exempel bifogas i följande för att användaren ska förstå bättre:

Här definierar vi de nödvändiga biblioteken. Efter det definierar vi ett namnområde som innehåller klassen där vi vill visa strängen i konsolfönstret. Vi kallar detta definierade namnutrymme i 'main'-funktionen med variabeln 'c'. Efter det anropar vi metoden print() med hjälp av ett namnområdesobjekt. Vi visar strängen igen på konsolskärmen efter metodanropet. Utdata måste vara båda strängar och visas på konsolskärmen. När vi kör den här koden uppstår felet som visas i följande:

#include

använder sig av namnutrymme std ;

namnutrymme mitt namnutrymme {

klass cout {
offentlig :
tomhet skriva ut ( ) {


cout << 'Anpassad utformning' << std :: endl ;

}

} ;

}

int huvud ( ) {

mitt Namnutrymme :: cout c ;
c. skriva ut ( ) ;


cout << 'Hej världen!' << std :: endl ;

lämna tillbaka 0 ;

}

Kompilatorn valde inte cout-satsen som visar data på konsolskärmen. Kompilatorn kan inte förstå namnområdet som hör till cout-satsen och genererar ett fel. Lösningen på detta fel är att lägga till ett namnområdesobjekt med en cout-sats för kompilatorns läsbarhet och förståelse. Lägg till 'std::' längs cout-satsen och kör koden. Följande utdata visas på konsolskärmen:

Slutsats

Här kan vi säga att visning av en utdata på konsolskärmen också genererar ett fel som inte är ett syntaxfel eller ett logiskt fel. För det mesta skriver användaren en bra känsla för kod, men det är inte förståeligt för kompilatorn. Kompilatorn är tvetydig om input. Så, förtydliga varje kodsteg med korrekt namnmellanrum och syntax för att undvika fel i programmeringsspråket C++. Stegen som är involverade i att lösa det här problemet är att använda explicita kvalificerare, förhindra namnutrymmeskrockar och säkerställa att de avsedda funktionerna eller objekten identifierade stegen som är involverade i att lösa problemet.