Pogreška 'Cout je dvosmislena' u C++

Pogreska Cout Je Dvosmislena U C



Ovaj se članak bavi dvosmislenim pogreškama cout u programskom jeziku C++. Dvosmislena situacija se pojavljuje kada prevodilac ne može odrediti metode ili operatore koji će se koristiti na različitim zadacima. Ponekad koristimo istu parametarsku funkciju s istim prostorom imena, a tada je cout definiran u oba slučaja. Kada izvršavamo program, prevodilac generira dvosmislenu pogrešku cout jer prevoditelj ne razumije koje značenje ovaj kod prikazuje. Dvosmislenost cout nastaje kada postoji sukob između definiranih imenskih prostora ili višestrukih deklaracija funkcija unutar programa.

Primjer 1:

Ovo je primjer dvosmislene pogreške cout koja se uglavnom pojavljuje u C++ programiranju. Ovdje ćemo vidjeti kako kompajler generira dvosmislene pogreške na cout kada koristimo više imenskih prostora. Isječak koda ovog primjera spominje se u nastavku:







#include

imenski prostor laptop {

poništiti prikaz ( ) {

std :: cout << 'ovo je prostor imena prijenosnog računala' << std :: endl ;

}

}

imenski prostor mobilni {

poništiti prikaz ( ) {


std :: cout << 'ovo je mobilni imenski prostor' << std :: endl ;

}

}

int glavni ( ) {

korištenjem imenski prostor laptop ;
korištenjem imenski prostor mobilni ;

prikaz ( ) ;

povratak 0 ;


}

Ovdje smo uzeli program s dva prostora imena koji su definirani prema našim potrebama. Želimo prikazati nizove na ekranu. Izlaz ovog koda je priložen u sljedećem:





Nakon izvršenja koda, generira se pogreška o dvosmislenoj situaciji. Pogreška se stvara jer kada prevodilac čita kod, prevodilac ne dobiva jasan unos od strane korisnika. Koristili smo višestruke deklaracije prostora imena u našem kodu. U cijelom kodu koristili smo metodu 'display' isključivo za prikaz izlaza na ekranu. Prevoditelj nema pojma koja je metoda prikaza povezana s kojim prostorom imena. Kod moramo učiniti jednostavnim i jasnim tako da prevodilac lako razumije korake, a da kod ne bude dvosmislen.





Rješenje za ovu pogrešku je pozivanje metode sa srodnim prostorom naziva u glavnoj funkciji kako bi kompilator imao više razumijevanja. Jasno specificiramo koju metodu imenskog prostora želimo pozvati u našem glavnom izvršnom dijelu.

#include

imenski prostor laptop {

poništiti prikaz ( ) {


std :: cout << 'ovo je prostor imena prijenosnog računala' << std :: endl ;

}

}

imenski prostor mobilni {

poništiti prikaz ( ) {

std :: cout << 'ovo je mobilni imenski prostor' << std :: endl ;

}

}

int glavni ( ) {

korištenjem imenski prostor laptop ;
korištenjem imenski prostor mobilni ;
laptop :: prikaz ( ) ;
povratak 0 ;


}

Ovdje možemo jednostavno povezati metodu display() s prostorom imena 'laptop' u glavnoj funkciji kao što se vidi na prethodnoj snimci zaslona. Sada pokrenite program. Izlaz se prikazuje u prozoru konzole.



Primjer 2:

Ovaj scenarij povezan je s dvosmislenom pogreškom cout u C++. Kompajler pokazuje pogrešku kada ne razumije tijek izvršenja. Isječak koda ovog primjera priložen je u nastavku:

#include

imenski prostor Jezik {

poništiti ispisati ( int ja ) {

std :: cout << 'Imenski prostor jezika C: ' << ja << std :: endl ;

}

}

imenski prostor Java {

poništiti ispisati ( int j ) {

std :: cout << 'Imenski prostor java jezika: ' << j << std :: endl ;

}

}

korištenjem imenski prostor Jezik ;

korištenjem imenski prostor Java ;

int glavni ( ) {

ispisati ( 5 ) ;
povratak 0 ;


}

U ovom kodu definiramo sva potrebna zaglavlja knjižnice. Stvaramo dva prostora imena za različite svrhe. U prostoru imena 'Clanguage' definiramo metodu 'print' koja uzima cjelobrojnu vrijednost od korisnika. U funkciji “print” želimo prikazati vrijednost koju je korisnik proslijedio na ekranu konzole. Prikazujemo traženi izlaz pomoću toka 'cout' u našem kodu. Nakon toga definiramo drugi imenski prostor čije je ime “Java”.

U ovom prostoru naziva 'Java' ponovno koristimo metodu 'print' za prikaz vrijednosti koju korisnik prosljeđuje koristeći 'cout'. Pozivamo oba prostora imena za korištenje u našoj glavnoj funkciji kako bismo dobili željeni izlaz na prozoru konzole u C++. U 'glavnoj' funkciji, pozivamo 'print()' preopterećenu funkciju za prikaz proslijeđene vrijednosti na zaslonu konzole.

Kliknite opciju 'izvrši' u glavnom izborniku i odaberite opciju 'kompiliraj i pokreni'. Pogreška o dvosmislenosti javlja se pri ovom izvršavanju koda. Snimka zaslona pogreške priložena je na sljedeći način:

Ova pogreška ukazuje na to da je prevodilac zbunjen oko preopterećene funkcije print() koja se poziva. Ova je pogreška u retku 19,  'ispis (5)'. Prevodilac je zbunjen oko imenskog prostora kojem pripada ova preopterećena funkcija. Početnici su uvijek zapeli u ovakvim vrstama pogrešaka većinu vremena.

Idemo riješiti ovu grešku koja zapravo nije složena. Dvosmislene pogreške se lako rješavaju. Moramo specificirati imenski prostor duž preopterećene funkcije u 'glavnoj' funkciji radi vidljivosti i razumijevanja prevoditelja. Kao u ovom programu, dodajemo ovaj “java::print(5)” u naš postojeći kod kao što je spomenuto u sljedećem:

#include

imenski prostor Jezik {

poništiti ispisati ( int ja ) {

std :: cout << 'Imenski prostor jezika C: ' << ja << std :: endl ;

}

}

imenski prostor Java {

poništiti ispisati ( int j ) {

std :: cout << 'Imenski prostor java jezika: ' << j << std :: endl ;

}

}

korištenjem imenski prostor Jezik ;

korištenjem imenski prostor Java ;

int glavni ( ) {

Java :: ispisati ( 5 ) ;
povratak 0 ;


}

Sada se program savršeno izvršava bez ikakvih dvosmislenih pogrešaka i prikazuje izlaz na zaslonu konzole. Izlaz ovog programa je priložen u sljedećem:

Primjer 3:

Ovo je posljednji i posljednji primjer povezan s pogreškom koja se generira zbog dvosmislenog problema. Kompajler ne može dobiti točan rezultat. Isječak koda ovog primjera priložen je u nastavku radi boljeg razumijevanja korisnika:

Ovdje definiramo potrebne biblioteke. Nakon toga definiramo imenski prostor koji sadrži klasu u kojoj želimo prikazati string na prozoru konzole. Ovaj definirani prostor imena nazivamo u funkciji 'main' s varijablom 'c'. Nakon toga pozivamo metodu print() koristeći objekt imenskog prostora. Ponovno prikazujemo niz na ekranu konzole nakon poziva metode. Izlaz mora biti oba niza i mora se prikazati na ekranu konzole. Kada izvršimo ovaj kod, pojavljuje se pogreška kao što je prikazano u nastavku:

#include

korištenjem imenski prostor std ;

imenski prostor myNamespace {

razreda cout {
javnost :
poništiti ispisati ( ) {


cout << 'Custom cout' << std :: endl ;

}

} ;

}

int glavni ( ) {

myNamespace :: cout c ;
c. ispisati ( ) ;


cout << 'Pozdrav svijete!' << std :: endl ;

povratak 0 ;

}

Kompajler nije odabrao naredbu cout koja prikazuje podatke na ekranu konzole. Kompajler ne može razumjeti imenski prostor koji pripada izrazu cout i generira pogrešku. Rješenje za ovu pogrešku je dodavanje objekta imenskog prostora s naredbom cout za čitljivost i razumijevanje prevoditelja. Dodajte 'std::' duž naredbe cout i pokrenite kôd. Sljedeći izlaz se prikazuje na ekranu konzole:

Zaključak

Ovdje možemo reći da prikazivanje izlaza na ekranu konzole također generira pogrešku koja nije sintaktička niti logička pogreška. Većinu vremena, korisnik piše dobar smisao za kod, ali to nije razumljivo prevoditelju. Kompajler je dvosmislen u vezi s unosom. Dakle, razjasnite svaki korak koda ispravnim prostorom imena i sintaksom kako biste izbjegli pogreške u programskom jeziku C++. Koraci koji su uključeni u rješavanje ovog problema su korištenje eksplicitnih kvalifikatora, sprječavanje sukoba prostora imena i osiguravanje da predviđene funkcije ili objekti identificiraju korake uključene u rješavanje ovog problema.