Chyba „Cout je nejednoznačná“ v C++

Chyba Cout Je Nejednoznacna V C



Tento článok sa zaoberá nejednoznačnými chybami v programovacom jazyku C++. Nejednoznačná situácia nastáva, keď kompilátor nedokáže určiť metódy alebo operátory, ktoré sa majú použiť pri rôznych úlohách. Niekedy používame rovnakú funkciu parametra s rovnakým menným priestorom a potom je v oboch prípadoch definovaný cout. Keď spustíme program, kompilátor vygeneruje nejednoznačnú chybu cout, pretože kompilátor nerozumie, aký význam tento kód ukazuje. Cout nejednoznačnosť vzniká, keď existuje konflikt medzi definovanými mennými priestormi alebo viacerými deklaráciami funkcií v programe.

Príklad 1:

Toto je príklad nejednoznačnej chyby cout, ktorá sa väčšinou vyskytuje pri programovaní v C++. Tu uvidíme, ako kompilátor generuje nejednoznačné chyby na cout, keď používame viacero menných priestorov. Útržok kódu tohto príkladu je uvedený v nasledujúcom texte:







#include

menný priestor laptop {

neplatné displej ( ) {

std :: cout << 'toto je menný priestor notebooku' << std :: endl ;

}

}

menný priestor mobilné {

neplatné displej ( ) {


std :: cout << 'toto je mobilný menný priestor' << std :: endl ;

}

}

int Hlavná ( ) {

použitím menný priestor laptop ;
použitím menný priestor mobilné ;

displej ( ) ;

vrátiť 0 ;


}

Tu sme vzali program s dvoma mennými priestormi, ktoré sú definované podľa našich potrieb. Chceme zobraziť reťazce na obrazovke. Výstup tohto kódu je pripojený v nasledujúcom texte:





Po spustení kódu sa vygeneruje chyba o nejednoznačnej situácii. Chyba sa generuje, pretože keď kompilátor číta kód, kompilátor nedostane jasný vstup od používateľa. V našom kóde sme použili viacero deklarácií menného priestoru. V celom kóde sme použili metódu „zobrazenie“ výlučne na zobrazenie výstupu na obrazovke. Kompilátor netuší, ktorá metóda zobrazenia súvisí s ktorým priestorom názvov. Musíme urobiť kód jednoduchým a jasným, aby kompilátor ľahko pochopil kroky bez toho, aby bol kód nejednoznačný.





Riešením tejto chyby je zavolať metódu so súvisiacim menným priestorom v hlavnej funkcii, aby kompilátor lepšie pochopil. Jasne špecifikujeme, ktorú metódu menného priestoru chceme volať v našej hlavnej vykonávacej časti.

#include

menný priestor laptop {

neplatné displej ( ) {


std :: cout << 'toto je menný priestor notebooku' << std :: endl ;

}

}

menný priestor mobilné {

neplatné displej ( ) {

std :: cout << 'toto je mobilný menný priestor' << std :: endl ;

}

}

int Hlavná ( ) {

použitím menný priestor laptop ;
použitím menný priestor mobilné ;
laptop :: displej ( ) ;
vrátiť 0 ;


}

Tu môžeme jednoducho prepojiť metódu display() s menným priestorom „laptop“ v hlavnej funkcii, ako je vidieť na predchádzajúcej snímke obrazovky. Teraz spustite program. Výstup sa zobrazí v okne konzoly.



Príklad 2:

Tento scenár súvisí s nejednoznačnou chybou cout v C++. Kompilátor zobrazí chybu, keď nerozumie toku vykonávania. Útržok kódu z tohto príkladu je priložený v nasledujúcom texte:

#include

menný priestor Clanguage {

neplatné vytlačiť ( int i ) {

std :: cout << 'Priestor názvov jazyka C: ' << i << std :: endl ;

}

}

menný priestor java {

neplatné vytlačiť ( int j ) {

std :: cout << 'Priestor názvov jazyka java: ' << j << std :: endl ;

}

}

použitím menný priestor Clanguage ;

použitím menný priestor java ;

int Hlavná ( ) {

vytlačiť ( 5 ) ;
vrátiť 0 ;


}

V tomto kóde definujeme všetky požadované hlavičky knižnice. Vytvárame dva menné priestory na rôzne účely. V mennom priestore „Clanguage“ definujeme metódu „print“, ktorá preberá celočíselné hodnoty od používateľa. Vo funkcii „tlač“ chceme zobraziť hodnotu, ktorú používateľ odovzdal na obrazovke konzoly. Požadovaný výstup zobrazíme pomocou streamu „cout“ v našom kóde. Potom definujeme ďalší menný priestor, ktorého názov je „Java“.

V tomto mennom priestore „Java“ opäť používame metódu „print“ na zobrazenie hodnoty, ktorú používateľ odovzdá pomocou „cout“. Oba menné priestory voláme na použitie v našej hlavnej funkcii, aby sme získali požadovaný výstup v okne konzoly v C++. Vo funkcii „main“ voláme preťaženú funkciu „print()“, aby sme zobrazili odovzdanú hodnotu na obrazovke konzoly.

Kliknite na možnosť „vykonať“ z hlavnej ponuky a vyberte možnosť „kompilovať a spustiť“. Chyba o nejednoznačnosti sa vyskytuje pri vykonávaní tohto kódu. Snímka chybovej obrazovky je pripojená nasledovne:

Táto chyba naznačuje, že kompilátor je zmätený z preťaženej funkcie print(), ktorá sa volá. Táto chyba sa nachádza v riadku 19, „tlač (5)“. Kompilátor je zmätený v mennom priestore, do ktorého patrí táto preťažená funkcia. Začiatočníci sú vždy väčšinou uviaznutí v týchto typoch chýb.

Poďme vyriešiť túto chybu, ktorá v skutočnosti nie je zložitá. Nejednoznačné chyby sa dajú ľahko vyriešiť. Musíme špecifikovať menný priestor pozdĺž preťaženej funkcie v „hlavnej“ funkcii pre viditeľnosť a pochopenie kompilátora. Rovnako ako v tomto programe pridávame toto „java::print(5)“ do nášho existujúceho kódu, ako je uvedené nižšie:

#include

menný priestor Clanguage {

neplatné vytlačiť ( int i ) {

std :: cout << 'Priestor názvov jazyka C: ' << i << std :: endl ;

}

}

menný priestor java {

neplatné vytlačiť ( int j ) {

std :: cout << 'Priestor názvov jazyka java: ' << j << std :: endl ;

}

}

použitím menný priestor Clanguage ;

použitím menný priestor java ;

int Hlavná ( ) {

java :: vytlačiť ( 5 ) ;
vrátiť 0 ;


}

Teraz je program vykonaný dokonale bez akejkoľvek nejednoznačnej chyby a zobrazuje výstup na obrazovke konzoly. Výstup tohto programu je priložený v nasledujúcom texte:

Príklad 3:

Toto je posledný a posledný príklad súvisiaci s chybou, ktorá sa generuje z dôvodu nejednoznačného problému. Kompilátor nemôže získať správny výsledok. Útržok kódu z tohto príkladu je pripojený v nasledujúcom texte pre lepšie pochopenie používateľa:

Tu definujeme požadované knižnice. Potom definujeme menný priestor, ktorý obsahuje triedu, v ktorej chceme zobraziť reťazec v okne konzoly. Tento definovaný menný priestor vo funkcii „main“ nazývame premennou „c“. Potom zavoláme metódu print() pomocou objektu menného priestoru. Reťazec po zavolaní metódy opäť zobrazíme na obrazovke konzoly. Výstupom musia byť oba reťazce a musia byť zobrazené na obrazovke konzoly. Keď spustíme tento kód, vyskytne sa chyba, ako je znázornené v nasledujúcom texte:

#include

použitím menný priestor std ;

menný priestor myNamespace {

trieda cout {
verejnosti :
neplatné vytlačiť ( ) {


cout << 'Cout na mieru' << std :: endl ;

}

} ;

}

int Hlavná ( ) {

myNamespace :: cout c ;
c. vytlačiť ( ) ;


cout << 'Ahoj Svet!' << std :: endl ;

vrátiť 0 ;

}

Kompilátor nevybral príkaz cout, ktorý zobrazuje údaje na obrazovke konzoly. Kompilátor nerozumie priestoru názvov, ktorý patrí do príkazu cout a vygeneruje chybu. Riešením tejto chyby je pridanie objektu menného priestoru s príkazom cout pre čitateľnosť a pochopenie kompilátora. Pridajte „std::“ pozdĺž príkazu cout a spustite kód. Na obrazovke konzoly sa zobrazí nasledujúci výstup:

Záver

Tu môžeme povedať, že zobrazenie výstupu na obrazovke konzoly tiež generuje chybu, ktorá nie je syntaktickou ani logickou chybou. Používateľ väčšinou píše dobrý zmysel pre kód, ale pre kompilátora to nie je pochopiteľné. Kompilátor je nejednoznačný ohľadom vstupu. Takže objasnite každý krok kódu pomocou správneho priestoru názvov a syntaxe, aby ste sa vyhli chybám v programovacom jazyku C++. Kroky zapojené do vyriešenia tohto problému sú použitie explicitných kvalifikátorov, zabránenie kolíziám v mennom priestore a zabezpečenie toho, aby zamýšľané funkcie alebo objekty identifikovali kroky zapojené do riešenia tohto problému.