Viga 'Cout on mitmetähenduslik' C++-s

Viga Cout On Mitmetahenduslik C S



See artikkel on mures C++ programmeerimiskeele mitmetähenduslike vigade tuvastamise pärast. Ebaselge olukord tekib siis, kui kompilaator ei suuda määrata erinevate ülesannete puhul kasutatavaid meetodeid või operaatoreid. Mõnikord kasutame sama nimeruumiga sama parameetrifunktsiooni ja siis on mõlemal juhul defineeritud cout. Kui me programmi käivitame, genereerib kompilaator cout mitmetähendusliku vea, kuna kompilaator ei saa aru, millist tähendust see kood näitab. Cout ebaselgus tekib siis, kui programmis on määratletud nimeruumide või mitme funktsioonide deklaratsiooni vahel konflikt.

Näide 1:

See on näide cout mitmetähenduslikust veast, mis esineb enamasti C++ programmeerimisel. Siin näeme, kuidas kompilaator genereerib mitme nimeruumi kasutamisel cout mitmetähenduslikud vead. Selle näite koodilõiku mainitakse järgmises:







#include

nimeruum sülearvuti {

tühine kuva ( ) {

std :: cout << 'see on sülearvuti nimeruum' << std :: endl ;

}

}

nimeruum mobiilne {

tühine kuva ( ) {


std :: cout << 'see on mobiilne nimeruum' << std :: endl ;

}

}

int peamine ( ) {

kasutades nimeruum sülearvuti ;
kasutades nimeruum mobiilne ;

kuva ( ) ;

tagasi 0 ;


}

Siin võtsime programmi kahe nimeruumiga, mis on määratletud vastavalt meie vajadustele. Tahame stringe ekraanil kuvada. Selle koodi väljund on lisatud järgmisele:





Koodi käivitamisel genereeritakse viga ebaselge olukorra kohta. Viga tekib seetõttu, et kui kompilaator koodi loeb, ei saa kompilaator kasutajapoolselt selget sisendit. Kasutasime oma koodis mitut nimeruumi deklaratsiooni. Kogu koodis kasutasime kuvamismeetodit ainult väljundi ekraanil kuvamiseks. Kompilaatoril pole õrna aimugi, milline kuvamisviis millise nimeruumiga seotud on. Peame koodi muutma lihtsaks ja selgeks, et kompilaator saaks hõlpsalt sammudest aru, ilma et see muudaks koodi mitmetähenduslikuks.





Selle tõrke lahenduseks on kutsuda põhifunktsioonis välja meetod koos seotud nimeruumiga, et kompilaator saaks paremini aru. Täpsustame selgelt, millist nimeruumi meetodit oma peamises täitmisosas kutsuda tahame.

#include

nimeruum sülearvuti {

tühine kuva ( ) {


std :: cout << 'see on sülearvuti nimeruum' << std :: endl ;

}

}

nimeruum mobiilne {

tühine kuva ( ) {

std :: cout << 'see on mobiilne nimeruum' << std :: endl ;

}

}

int peamine ( ) {

kasutades nimeruum sülearvuti ;
kasutades nimeruum mobiilne ;
sülearvuti :: kuva ( ) ;
tagasi 0 ;


}

Siin saame lihtsalt linkida meetodi display() põhifunktsiooni nimeruumiga 'sülearvuti', nagu on näha eelmisel ekraanipildil. Nüüd käivitage programm. Väljund kuvatakse konsooli aknas.



Näide 2:

See stsenaarium on seotud C++ mitmetähendusliku veaga. Kompilaator kuvab vea, kui ta ei mõista täitmisvoogu. Selle näite koodilõik on lisatud järgmiselt:

#include

nimeruum Keel {

tühine printida ( int i ) {

std :: cout << 'C-keele nimeruum:' << i << std :: endl ;

}

}

nimeruum java {

tühine printida ( int j ) {

std :: cout << 'Java keele nimeruum:' << j << std :: endl ;

}

}

kasutades nimeruum Keel ;

kasutades nimeruum java ;

int peamine ( ) {

printida ( 5 ) ;
tagasi 0 ;


}

Selles koodis määratleme kõik vajalikud teegi päised. Loome kaks nimeruumi erinevatel eesmärkidel. Nimeruumis 'Clanguage' määratleme 'printimise' meetodi, mis võtab kasutajalt täisarvu väärtuse. Funktsioonis “print” tahame näidata väärtust, mille kasutaja konsooliekraanil edastas. Kuvame vajaliku väljundi, kasutades oma koodis voogu “cout”. Pärast seda määratleme teise nimeruumi, mille nimi on 'Java'.

Selles 'Java' nimeruumis kasutame uuesti printmeetodit, et kuvada väärtus, mille kasutaja edastab 'cout' abil. Me kutsume mõlemat nimeruumi oma põhifunktsioonis kasutamiseks, et saada soovitud väljund konsooliaknas C++ keeles. Funktsioonis 'peamine' kutsume me ülekoormatud funktsiooni 'print()', et kuvada konsooliekraanil edastatud väärtus.

Klõpsake peamenüüs suvandil 'käivita' ja valige suvand 'kompileerida ja käivitada'. Selle koodi täitmisel ilmneb ebaselguse viga. Vea ekraanipilt on lisatud järgmiselt:

See tõrge näitab, et kompilaator on segaduses kutsutava ülekoormatud funktsiooni print() pärast. See viga on real 19, „print (5)”. Kompilaator on segaduses nimeruumi osas, kuhu see ülekoormatud funktsioon kuulub. Algajad jäävad seda tüüpi vigadesse enamasti kinni.

Lahendame selle vea, mis pole tegelikult keeruline. Mitmetähenduslikud vead on kergesti lahendatavad. Peame kompilaatori nähtavuse ja mõistmise huvides täpsustama nimeruumi koos ülekoormatud funktsiooniga funktsioonis 'peamine'. Nagu selles programmis, lisame selle 'java:: print(5)' meie olemasolevasse koodi, nagu on mainitud järgmises:

#include

nimeruum Keel {

tühine printida ( int i ) {

std :: cout << 'C-keele nimeruum:' << i << std :: endl ;

}

}

nimeruum java {

tühine printida ( int j ) {

std :: cout << 'Java keele nimeruum:' << j << std :: endl ;

}

}

kasutades nimeruum Keel ;

kasutades nimeruum java ;

int peamine ( ) {

java :: printida ( 5 ) ;
tagasi 0 ;


}

Nüüd käivitatakse programm suurepäraselt ilma ühegi mitmetähendusliku veata ja kuvab väljundi konsooli ekraanil. Selle programmi väljund on lisatud järgmisele:

Näide 3:

See on viimane ja viimane näide, mis on seotud ebaselge probleemi tõttu tekkinud veaga. Kompilaator ei saa õiget tulemust. Selle näite koodilõik on kasutajale parema arusaamise huvides lisatud järgmiselt.

Siin määratleme nõutavad teegid. Pärast seda määratleme nimeruumi, mis sisaldab klassi, milles me tahame stringi konsooliaknas kuvada. Nimetame seda määratletud nimeruumi funktsioonis 'main' muutujaga 'c'. Pärast seda kutsume nimeruumi objekti abil välja print() meetodi. Pärast meetodi kutset kuvame stringi uuesti konsooliekraanil. Väljund peab olema mõlemad stringid ja need kuvatakse konsooliekraanil. Selle koodi käivitamisel ilmneb tõrge, nagu on näidatud järgmises:

#include

kasutades nimeruum std ;

nimeruum minuNimeruum {

klass cout {
avalik :
tühine printida ( ) {


cout << 'Kohandatud valik' << std :: endl ;

}

} ;

}

int peamine ( ) {

minuNimeruum :: cout c ;
c. printida ( ) ;


cout << 'Tere, Maailm!' << std :: endl ;

tagasi 0 ;

}

Kompilaator ei valinud cout-lauset, mis kuvab andmed konsooliekraanil. Kompilaator ei saa aru cout-lausesse kuuluvast nimeruumist ja genereerib vea. Selle vea lahenduseks on kompilaatori loetavuse ja mõistmise huvides lisada nimeruumi objekt koos cout-lausega. Lisage cout-lausele 'std::' ja käivitage kood. Konsooliekraanil kuvatakse järgmine väljund:

Järeldus

Siin võib öelda, et väljundi kuvamine konsooliekraanil tekitab ka vea, mis ei ole süntaksi- ega loogikaviga. Enamasti kirjutab kasutaja hästi kooditaju, kuid see pole kompilaatorile arusaadav. Kompilaator on sisendi suhtes ebaselge. Nii et C++ programmeerimiskeeles vigade vältimiseks selgitage iga koodisammu õige nimevahe ja süntaksiga. Selle probleemi lahendamise toimingud on selgesõnaliste tähiste kasutamine, nimeruumi kokkupõrgete vältimine ja selle tagamine, et kavandatud funktsioonid või objektid tuvastavad selle probleemi lahendamisega seotud sammud.