„A Cout kétértelmű” hiba a C++-ban

A Cout Ketertelmu Hiba A C Ban



Ez a cikk a C++ programozási nyelv kétértelmű hibáival foglalkozik. A kétértelmű helyzet akkor jelenik meg, ha a fordító nem tudja meghatározni a különböző feladatokhoz használandó metódusokat vagy operátorokat. Néha ugyanazt a paraméterfüggvényt használjuk ugyanazzal a névtérrel, majd mindkét esetben cout van megadva. Amikor végrehajtjuk a programot, a fordító a cout kétértelmű hibát generálja, mivel a fordító nem érti, hogy ez a kód melyik jelentést mutatja. A cout kétértelműség akkor merül fel, ha ütközés van a programon belül a definiált névterek vagy a függvények többszörös deklarációi között.

1. példa:

Ez egy példa a cout kétértelmű hibára, amely többnyire a C++ programozásban fordul elő. Itt látni fogjuk, hogy a fordító hogyan generálja a kétértelmű hibákat a coutnál, ha több névteret használunk. A példa kódrészletét a következőkben említjük:







#include

névtér laptop {

üres kijelző ( ) {

std :: cout << 'ez a laptop névtér' << std :: endl ;

}

}

névtér Mobil {

üres kijelző ( ) {


std :: cout << 'ez a mobil névtér' << std :: endl ;

}

}

int fő- ( ) {

segítségével névtér laptop ;
segítségével névtér Mobil ;

kijelző ( ) ;

Visszatérés 0 ;


}

Itt vettünk egy programot két névtérrel, amelyeket igényünk szerint határoztunk meg. A karakterláncokat szeretnénk megjeleníteni a képernyőn. Ennek a kódnak a kimenete az alábbiakban található:





A kód végrehajtása során a hiba generálódik a cout kétértelmű helyzet miatt. A hiba azért keletkezik, mert amikor a fordító beolvassa a kódot, a fordító nem kap egyértelmű bemenetet a felhasználótól. A kódunkban több névtér-deklarációt használtunk. A teljes kódban a „display” módszert kizárólag a kimenet képernyőn való megjelenítésére használtuk. A fordítónak fogalma sincs, hogy melyik megjelenítési metódus melyik névtérhez kapcsolódik. A kódot egyszerűvé és áttekinthetővé kell tennünk, hogy a fordító könnyen megértse a lépéseket anélkül, hogy a kód kétértelművé válna.





A hiba megoldása az, hogy a fő függvényben egy kapcsolódó névtérrel hívjuk meg a metódust, hogy a fordító jobban megértse. A fő végrehajtási részben egyértelműen meghatározzuk, hogy a névtér melyik metódusát szeretnénk meghívni.

#include

névtér laptop {

üres kijelző ( ) {


std :: cout << 'ez a laptop névtér' << std :: endl ;

}

}

névtér Mobil {

üres kijelző ( ) {

std :: cout << 'ez a mobil névtér' << std :: endl ;

}

}

int fő- ( ) {

segítségével névtér laptop ;
segítségével névtér Mobil ;
laptop :: kijelző ( ) ;
Visszatérés 0 ;


}

Itt csak összekapcsolhatjuk a display() metódust a „laptop” névtérrel a fő függvényben, ahogy az előző képernyőképen is látható. Most futtassa a programot. A kimenet megjelenik a konzol ablakában.



2. példa:

Ez a forgatókönyv a C++ kód kétértelmű hibájához kapcsolódik. A fordító hibát jelez, ha nem érti a végrehajtási folyamatot. A példa kódrészlete az alábbiakban található:

#include

névtér Clanguage {

üres nyomtatás ( int én ) {

std :: cout << 'C nyelv névtere: ' << én << std :: endl ;

}

}

névtér Jáva {

üres nyomtatás ( int j ) {

std :: cout << 'Java nyelv névtere: ' << j << std :: endl ;

}

}

segítségével névtér Clanguage ;

segítségével névtér Jáva ;

int fő- ( ) {

nyomtatás ( 5 ) ;
Visszatérés 0 ;


}

Ebben a kódban meghatározzuk az összes szükséges könyvtári fejlécet. Két névteret hozunk létre különböző célokra. A „Clanguage” névtérben definiálunk egy „print” metódust, amely az egész értéket veszi át a felhasználótól. A „print” funkcióban azt az értéket szeretnénk megjeleníteni, amelyet a felhasználó a konzol képernyőjén adott át. A szükséges kimenetet a kódunkban található „cout” stream segítségével jelenítjük meg. Ezt követően meghatározunk egy másik névteret, amelynek neve „Java”.

Ebben a „Java” névtérben ismét a „print” módszert használjuk annak az értéknek a megjelenítésére, amelyet a felhasználó a „cout” szóval ad át. Mindkét névteret meghívjuk a fő függvényünkben, hogy megkapjuk a kívánt kimenetet a konzolablakban C++ nyelven. A „main” függvényben a „print()” túlterhelt függvényt hívjuk meg, hogy megjelenítsük az átadott értéket a konzol képernyőjén.

Kattintson a „végrehajtás” lehetőségre a főmenüben, és válassza a „fordítás és futtatás” opciót. A kétértelműségre vonatkozó hiba a kód végrehajtása során jelentkezik. A hiba képernyőképe az alábbiak szerint mellékelve:

Ez a hiba azt jelzi, hogy a fordító össze van zavarodva a meghívott túlterhelt print() függvény miatt. Ez a hiba a 19. „nyomtatás (5)” sorban található. A fordító össze van zavarodva azzal a névtérrel kapcsolatban, amelyhez ez a túlterhelt függvény tartozik. A kezdők az idő nagy részében mindig beleragadnak az ilyen típusú hibákba.

Oldjuk meg ezt a hibát, amely valójában nem bonyolult. A kétértelmű hibák könnyen kijavíthatók. Meg kell adnunk a névteret a túlterhelt függvény mellett a „fő” függvényben a fordító láthatósága és megértése érdekében. Akárcsak ebben a programban, hozzáadjuk ezt a „java::print(5)”-t a meglévő kódunkhoz, amint azt a következőkben említettük:

#include

névtér Clanguage {

üres nyomtatás ( int én ) {

std :: cout << 'C nyelv névtere: ' << én << std :: endl ;

}

}

névtér Jáva {

üres nyomtatás ( int j ) {

std :: cout << 'Java nyelv névtere: ' << j << std :: endl ;

}

}

segítségével névtér Clanguage ;

segítségével névtér Jáva ;

int fő- ( ) {

Jáva :: nyomtatás ( 5 ) ;
Visszatérés 0 ;


}

Most a program tökéletesen lefut minden félreérthető hiba nélkül, és megjeleníti a kimenetet a konzol képernyőjén. A program kimenete az alábbiakban található:

3. példa:

Ez az utolsó és utolsó példa egy kétértelmű probléma miatt generált hibára. A fordító nem kapja meg a megfelelő eredményt. A példa kódrészletét az alábbiakban csatoljuk, hogy a felhasználó jobban megértse:

Itt meghatározzuk a szükséges könyvtárakat. Ezt követően definiálunk egy névteret, amely tartalmazza azt az osztályt, amelyben a stringet meg akarjuk jeleníteni a konzolablakban. Ezt a definiált névteret a „main” függvényben a „c” változóval hívjuk. Ezt követően egy névtér objektum segítségével hívjuk meg a print() metódust. A metódushívás után ismét megjelenítjük a karakterláncot a konzol képernyőjén. A kimenetnek mindkét karakterláncnak kell lennie, és meg kell jelennie a konzol képernyőjén. Amikor ezt a kódot végrehajtjuk, a hiba az alábbiak szerint történik:

#include

segítségével névtér std ;

névtér myNamespace {

osztály cout {
nyilvános :
üres nyomtatás ( ) {


cout << 'Egyedi kivitel' << std :: endl ;

}

} ;

}

int fő- ( ) {

myNamespace :: cout c ;
c. nyomtatás ( ) ;


cout << 'Helló Világ!' << std :: endl ;

Visszatérés 0 ;

}

A fordító nem azt a cout utasítást választotta, amely az adatokat a konzol képernyőjén jeleníti meg. A fordító nem tudja megérteni a cout utasításhoz tartozó névteret, és hibát generál. A hiba megoldása egy névtérobjektum hozzáadása cout utasítással a fordító olvashatósága és megértése érdekében. Adja hozzá az „std::” kifejezést a cout utasításhoz, és futtassa a kódot. A következő kimenet jelenik meg a konzol képernyőjén:

Következtetés

Itt azt mondhatjuk, hogy egy kimenet megjelenítése a konzol képernyőjén olyan hibát is generál, amely nem szintaktikai és nem logikai hiba. Legtöbbször a felhasználó jól értelmezi a kódot, de ez nem érthető a fordító számára. A fordító félreérthető a bemenettel kapcsolatban. Tehát tisztázza a kód minden lépését megfelelő névtérrel és szintaxissal, hogy elkerülje a C++ programozási nyelv hibáit. A probléma megoldásának lépései az explicit minősítők használata, a névterek ütközésének megakadályozása, valamint annak biztosítása, hogy a kívánt funkciók vagy objektumok azonosítsák a probléma megoldásának lépéseit.