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

Chyba Cout Je Nejednoznacna V C



Tento článek se zabývá nejednoznačnými chybami cout v programovacím jazyce C++. Nejednoznačná situace nastává, když kompilátor nemůže určit metody nebo operátory, které se mají použít na různé úlohy. Někdy používáme stejnou parametrickou funkci se stejným jmenným prostorem a pak je v obou případech definován cout. Když spustíme program, kompilátor vygeneruje nejednoznačnou chybu cout, protože kompilátor nechápe, jaký význam tento kód ukazuje. Nejednoznačnost cout vzniká, když existuje konflikt mezi definovanými jmennými prostory nebo více deklaracemi funkcí uvnitř programu.

Příklad 1:

Toto je příklad nejednoznačné chyby cout, která se většinou vyskytuje v programování v C++. Zde uvidíme, jak kompilátor generuje nejednoznačné chyby na cout, když používáme více jmenných prostorů. Fragment kódu tohoto příkladu je uveden v následujícím textu:







#include

jmenný prostor notebook {

prázdnota Zobrazit ( ) {

std :: cout << 'toto je jmenný prostor notebooku' << std :: endl ;

}

}

jmenný prostor mobilní, pohybliví {

prázdnota Zobrazit ( ) {


std :: cout << 'toto je mobilní jmenný prostor' << std :: endl ;

}

}

int hlavní ( ) {

použitím jmenný prostor notebook ;
použitím jmenný prostor mobilní, pohybliví ;

Zobrazit ( ) ;

vrátit se 0 ;


}

Zde jsme vzali program se dvěma jmennými prostory, které jsou definovány podle našich potřeb. Chceme zobrazit řetězce na obrazovce. Výstup tohoto kódu je připojen v následujícím textu:





Při spuštění kódu se vygeneruje chyba o nejednoznačné situaci. Chyba je generována, protože když kompilátor čte kód, kompilátor nezíská jasný vstup od uživatele. V našem kódu jsme použili více deklarací jmenného prostoru. V celém kódu jsme použili metodu „zobrazení“ pouze k zobrazení výstupu na obrazovce. Kompilátor netuší, která metoda zobrazení souvisí s kterým jmenným prostorem. Musíme udělat kód jednoduchý a jasný, aby kompilátor snadno porozuměl krokům, aniž by byl kód nejednoznačný.





Řešením této chyby je zavolat metodu se souvisejícím jmenným prostorem v hlavní funkci, aby kompilátor lépe porozuměl. Jasně specifikujeme, kterou metodu jmenného prostoru chceme volat v naší hlavní prováděcí části.

#include

jmenný prostor notebook {

prázdnota Zobrazit ( ) {


std :: cout << 'toto je jmenný prostor notebooku' << std :: endl ;

}

}

jmenný prostor mobilní, pohybliví {

prázdnota Zobrazit ( ) {

std :: cout << 'toto je mobilní jmenný prostor' << std :: endl ;

}

}

int hlavní ( ) {

použitím jmenný prostor notebook ;
použitím jmenný prostor mobilní, pohybliví ;
notebook :: Zobrazit ( ) ;
vrátit se 0 ;


}

Zde můžeme pouze propojit metodu display() s jmenným prostorem „laptop“ v hlavní funkci, jak je vidět na předchozím snímku obrazovky. Nyní spusťte program. Výstup se zobrazí v okně konzoly.



Příklad 2:

Tento scénář souvisí s nejednoznačnou chybou cout v C++. Kompilátor zobrazí chybu, když nerozumí toku provádění. Fragment kódu z tohoto příkladu je připojen v následujícím textu:

#include

jmenný prostor Clanguage {

prázdnota tisk ( int i ) {

std :: cout << 'Jmenný prostor jazyka C:' << i << std :: endl ;

}

}

jmenný prostor Jáva {

prázdnota tisk ( int j ) {

std :: cout << 'Jmenný prostor jazyka Java:' << j << std :: endl ;

}

}

použitím jmenný prostor Clanguage ;

použitím jmenný prostor Jáva ;

int hlavní ( ) {

tisk ( 5 ) ;
vrátit se 0 ;


}

V tomto kódu definujeme všechna požadovaná záhlaví knihovny. Vytváříme dva jmenné prostory pro různé účely. Ve jmenném prostoru „Clanguage“ definujeme metodu „print“, která přebírá celočíselnou hodnotu od uživatele. Ve funkci „tisk“ chceme zobrazit hodnotu, kterou uživatel předal na obrazovce konzoly. Požadovaný výstup zobrazíme pomocí streamu „cout“ v našem kódu. Poté definujeme další jmenný prostor, jehož název je „Java“.

V tomto jmenném prostoru „Java“ opět použijeme metodu „print“ k zobrazení hodnoty, kterou uživatel předá pomocí „cout“. Voláme oba jmenné prostory pro použití v naší hlavní funkci, abychom získali požadovaný výstup v okně konzoly v C++. Ve funkci „hlavní“ voláme přetíženou funkci „print()“, aby se předaná hodnota zobrazila na obrazovce konzoly.

Klikněte na možnost „spustit“ z hlavní nabídky a vyberte možnost „kompilovat a spustit“. Při provádění tohoto kódu dochází k chybě o nejednoznačnosti. Snímek chybové obrazovky je připojen následovně:

Tato chyba znamená, že kompilátor je zmatený z přetížené funkce print(), která je volána. Tato chyba je na řádku 19, „tisk (5)“. Kompilátor je zmatený z oboru názvů, do kterého tato přetížená funkce patří. Začátečníci jsou vždy většinou uvízli v těchto typech chyb.

Pojďme vyřešit tuto chybu, která ve skutečnosti není složitá. Nejednoznačné chyby lze snadno vyřešit. Musíme specifikovat jmenný prostor podél přetížené funkce ve funkci „hlavní“ pro viditelnost a pochopení kompilátoru. Stejně jako v tomto programu přidáváme toto „java::print(5)“ do našeho stávajícího kódu, jak je uvedeno v následujícím textu:

#include

jmenný prostor Clanguage {

prázdnota tisk ( int i ) {

std :: cout << 'Jmenný prostor jazyka C:' << i << std :: endl ;

}

}

jmenný prostor Jáva {

prázdnota tisk ( int j ) {

std :: cout << 'Jmenný prostor jazyka Java:' << j << std :: endl ;

}

}

použitím jmenný prostor Clanguage ;

použitím jmenný prostor Jáva ;

int hlavní ( ) {

Jáva :: tisk ( 5 ) ;
vrátit se 0 ;


}

Nyní je program spuštěn perfektně bez jakékoli nejednoznačné chyby a zobrazuje výstup na obrazovce konzoly. Výstup tohoto programu je připojen v následujícím textu:

Příklad 3:

Toto je poslední a poslední příklad související s chybou, která je generována kvůli nejednoznačnému problému. Kompilátor nemůže získat správný výsledek. Fragment kódu z tohoto příkladu je pro lepší pochopení uživatele připojen v následujícím textu:

Zde definujeme požadované knihovny. Poté definujeme jmenný prostor, který obsahuje třídu, ve které chceme zobrazit řetězec v okně konzoly. Tento definovaný jmenný prostor nazýváme ve funkci „main“ s proměnnou „c“. Poté zavoláme metodu print() pomocí objektu jmenného prostoru. Po volání metody znovu zobrazíme řetězec na obrazovce konzoly. Výstupem musí být oba řetězce a musí být zobrazeny na obrazovce konzoly. Když spustíme tento kód, dojde k chybě, jak je znázorněno v následujícím:

#include

použitím jmenný prostor std ;

jmenný prostor můjNamespace {

třída cout {
veřejnost :
prázdnota tisk ( ) {


cout << 'Cout na míru' << std :: endl ;

}

} ;

}

int hlavní ( ) {

můjNamespace :: cout C ;
C. tisk ( ) ;


cout << 'Ahoj světe!' << std :: endl ;

vrátit se 0 ;

}

Kompilátor nevybral příkaz cout, který zobrazuje data na obrazovce konzoly. Kompilátor nerozumí oboru názvů, který patří k příkazu cout, a generuje chybu. Řešením této chyby je přidání objektu jmenného prostoru s příkazem cout pro čitelnost a porozumění kompilátoru. Přidejte „std::“ podél příkazu cout a spusťte kód. Na obrazovce konzoly se zobrazí následující výstup:

Závěr

Zde můžeme říci, že zobrazení výstupu na obrazovce konzoly také generuje chybu, která není syntaktickou ani logickou chybou. Většinu času uživatel píše dobrý smysl pro kód, ale pro kompilátor to není srozumitelné. Kompilátor je nejednoznačný ohledně vstupu. Vyjasněte si tedy každý krok kódu se správným jmenným prostorem a syntaxí, abyste se vyhnuli chybám v programovacím jazyce C++. Kroky zapojené do řešení tohoto problému využívají explicitní kvalifikátory, zabraňují kolizím jmenného prostoru a zajišťují, že zamýšlené funkce nebo objekty identifikují kroky zapojené do řešení tohoto problému.