'Cout on epäselvä' -virhe C++:ssa

Cout On Epaselva Virhe C Ssa



Tämä artikkeli on huolissaan C++-ohjelmointikielen moniselitteisistä virheistä. Epäselvä tilanne syntyy, kun kääntäjä ei pysty määrittelemään eri tehtävissä käytettäviä menetelmiä tai operaattoreita. Joskus käytämme samaa parametrifunktiota samalla nimiavaruudella, ja sitten cout määritellään molemmissa tapauksissa. Kun suoritamme ohjelman, kääntäjä tuottaa cout epäselvän virheen, koska kääntäjä ei ymmärrä mitä merkitystä tämä koodi näyttää. Cout-epäselvyys syntyy, kun määritettyjen nimiavaruuksien tai useiden funktioiden ilmoitusten välillä on ristiriita ohjelman sisällä.

Esimerkki 1:

Tämä on esimerkki cout moniselitteisestä virheestä, joka esiintyy useimmiten C++-ohjelmoinnissa. Täällä näemme, kuinka kääntäjä luo epäselvät virheet coutissa, kun käytämme useita nimiavaruuksia. Tämän esimerkin koodinpätkä mainitaan seuraavassa:





#include

nimiavaruus kannettava tietokone {

mitätön näyttö ( ) {

std :: cout << 'tämä on kannettavan tietokoneen nimiavaruus' << std :: endl ;

}

}

nimiavaruus mobiili {

mitätön näyttö ( ) {


std :: cout << 'tämä on mobiilinimiavaruus' << std :: endl ;

}

}

int pää ( ) {

käyttämällä nimiavaruus kannettava tietokone ;
käyttämällä nimiavaruus mobiili ;

näyttö ( ) ;

palata 0 ;


}

Tässä otimme ohjelman, jossa on kaksi nimiavaruutta, jotka on määritelty tarpeidemme mukaan. Haluamme näyttää merkkijonot näytöllä. Tämän koodin tulos on liitetty seuraavaan:





Koodia suoritettaessa syntyy virhe cout-epäselvästä tilanteesta. Virhe syntyy, koska kääntäjän lukeessa koodin kääntäjä ei saa selkeää syötettä käyttäjäpuolelta. Käytimme koodissamme useita nimiavaruusmäärityksiä. Koko koodissa käytimme 'näyttö'-menetelmää vain tuotoksen näyttämiseen näytöllä. Kääntäjällä ei ole aavistustakaan, mikä näyttötapa liittyy mihinkin nimiavaruuteen. Meidän on tehtävä koodi yksinkertaiseksi ja selkeäksi, jotta kääntäjä ymmärtää vaiheet helposti tekemättä koodista moniselitteistä.





Ratkaisu tähän virheeseen on kutsua menetelmää siihen liittyvän nimiavaruuden kanssa päätoiminnossa, jotta kääntäjä ymmärtää paremmin. Määritämme selkeästi, mitä nimiavaruuden menetelmää haluamme kutsua pääsuoritusosassa.

#include

nimiavaruus kannettava tietokone {

mitätön näyttö ( ) {


std :: cout << 'tämä on kannettavan tietokoneen nimiavaruus' << std :: endl ;

}

}

nimiavaruus mobiili {

mitätön näyttö ( ) {

std :: cout << 'tämä on mobiilinimiavaruus' << std :: endl ;

}

}

int pää ( ) {

käyttämällä nimiavaruus kannettava tietokone ;
käyttämällä nimiavaruus mobiili ;
kannettava tietokone :: näyttö ( ) ;
palata 0 ;


}

Tässä voimme vain linkittää display()-menetelmän päätoiminnon 'kannettava tietokone' -nimiavaruuteen, kuten edellisessä kuvakaappauksessa näkyy. Suorita nyt ohjelma. Tulos näkyy konsoliikkunassa.



Esimerkki 2:

Tämä skenaario liittyy C++:n moniselitteiseen cout-virheeseen. Kääntäjä näyttää virheen, kun se ei ymmärrä suorituskulkua. Tämän esimerkin koodinpätkä on liitteenä seuraavassa:

#include

nimiavaruus kieli {

mitätön Tulosta ( int i ) {

std :: cout << 'C-kielen nimiavaruus:' << i << std :: endl ;

}

}

nimiavaruus java {

mitätön Tulosta ( int j ) {

std :: cout << 'Java-kielen nimiavaruus:' << j << std :: endl ;

}

}

käyttämällä nimiavaruus kieli ;

käyttämällä nimiavaruus java ;

int pää ( ) {

Tulosta ( 5 ) ;
palata 0 ;


}

Tässä koodissa määritämme kaikki tarvittavat kirjaston otsikot. Luomme kaksi nimiavaruutta eri tarkoituksiin. 'Clanguage'-nimiavaruudessa määritämme 'print'-menetelmän, joka ottaa kokonaislukuarvon käyttäjältä. 'Tulosta'-toiminnossa haluamme näyttää arvon, jonka käyttäjä välitti konsolin näytöllä. Näytämme vaaditun lähdön koodissamme olevan 'cout'-virran avulla. Tämän jälkeen määritämme toisen nimiavaruuden, jonka nimi on 'Java'.

Tässä 'Java'-nimiavaruudessa käytämme 'print'-menetelmää uudelleen näyttääksemme arvon, jonka käyttäjä välittää käyttämällä 'cout'. Kutsumme molempia nimiavaruuksia käytettäväksi pääfunktiossamme saadaksemme halutun tulosteen konsoliikkunassa C++:ssa. 'Main'-funktiossa kutsumme 'print()'-ylikuormitettua funktiota näyttääkseen välitetyn arvon konsolin näytöllä.

Napsauta 'suorita' -vaihtoehtoa päävalikosta ja valitse 'käännä ja suorita' -vaihtoehto. Tässä koodin suorituksessa ilmenee epäselvyyttä koskeva virhe. Virheen kuvakaappaus on liitteenä seuraavasti:

Tämä virhe osoittaa, että kääntäjä on hämmentynyt kutsutusta ylikuormitetusta print()-funktiosta. Tämä virhe on rivillä 19, ”tulosta (5)”. Kääntäjä on ymmällään nimiavaruudesta, johon tämä ylikuormitettu funktio kuuluu. Aloittelijat ovat aina jumissa tällaisissa virheissä suurimman osan ajasta.

Ratkaistaan ​​tämä virhe, joka ei ole todellisuudessa monimutkainen. Epäselvät virheet on helppo korjata. Meidän on määritettävä nimiavaruus ylikuormitetun funktion varrella 'pää'-funktiossa kääntäjän näkyvyyden ja ymmärtämisen vuoksi. Kuten tässä ohjelmassa, lisäämme tämän 'java::print(5)' olemassa olevaan koodiimme, kuten seuraavassa mainitaan:

#include

nimiavaruus kieli {

mitätön Tulosta ( int i ) {

std :: cout << 'C-kielen nimiavaruus:' << i << std :: endl ;

}

}

nimiavaruus java {

mitätön Tulosta ( int j ) {

std :: cout << 'Java-kielen nimiavaruus:' << j << std :: endl ;

}

}

käyttämällä nimiavaruus kieli ;

käyttämällä nimiavaruus java ;

int pää ( ) {

java :: Tulosta ( 5 ) ;
palata 0 ;


}

Nyt ohjelma suoritetaan täydellisesti ilman mitään epäselviä virheitä ja näyttää tulosten konsolin näytöllä. Tämän ohjelman tulos on liitteenä seuraavassa:

Esimerkki 3:

Tämä on viimeinen ja viimeinen esimerkki, joka liittyy virheeseen, joka syntyy epäselvän ongelman takia. Kääntäjä ei voi saada oikeaa tulosta. Tämän esimerkin koodinpätkä on liitetty seuraavaan, jotta käyttäjä ymmärtäisi paremmin:

Tässä määrittelemme tarvittavat kirjastot. Tämän jälkeen määritämme nimiavaruuden, joka sisältää luokan, jossa haluamme näyttää merkkijonon konsoliikkunassa. Kutsumme tätä määritettyä nimiavaruutta 'main'-funktiossa 'c'-muuttujan kanssa. Tämän jälkeen kutsumme print()-metodia nimiavaruusobjektin avulla. Näytämme merkkijonon uudelleen konsolin näytöllä metodikutsun jälkeen. Tulosteen on oltava sekä merkkijonoja, että ne näkyvät konsolin näytöllä. Kun suoritamme tämän koodin, virhe ilmenee seuraavassa esitetyllä tavalla:

#include

käyttämällä nimiavaruus std ;

nimiavaruus myNamespace {

luokkaa cout {
julkinen :
mitätön Tulosta ( ) {


cout << 'Mukautettu malli' << std :: endl ;

}

} ;

}

int pää ( ) {

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


cout << 'Hei maailma!' << std :: endl ;

palata 0 ;

}

Kääntäjä ei valinnut cout-lausetta, joka näyttää tiedot konsolin näytöllä. Kääntäjä ei ymmärrä cout-käskyyn kuuluvaa nimiavaruutta ja tuottaa virheen. Ratkaisu tähän virheeseen on lisätä nimiavaruusobjekti, jossa on cout-käsky kääntäjän luettavuuden ja ymmärtämisen varmistamiseksi. Lisää 'std::' cout-lauseeseen ja suorita koodi. Konsolin näytöllä näkyy seuraava tulos:

Johtopäätös

Tässä voidaan sanoa, että tulosteen näyttäminen konsolin näytöllä tuottaa myös virheen, joka ei ole syntaksivirhe tai looginen virhe. Useimmiten käyttäjä kirjoittaa hyvän koodin tunteen, mutta se ei ole kääntäjälle ymmärrettävää. Kääntäjä on epäselvä syötteen suhteen. Joten, selvennä jokainen koodivaihe oikealla nimivälillä ja syntaksilla välttääksesi C++-ohjelmointikielen virheet. Tämän ongelman ratkaisemiseen liittyvät vaiheet ovat eksplisiittisten tarkenteiden käyttäminen, nimitilan yhteentörmäysten estäminen ja sen varmistaminen, että aiotut toiminnot tai objektit tunnistivat tämän ongelman ratkaisemiseen liittyvät vaiheet.