OHJ-1101 Ohjelmointi 1e 2008-09 1 Kääntäjän virheilmoituksia Kun progvh2 ohjelma käännetään antaa tutg++ seuraavat virheilmoitukset ja varoitukset: proffa> tutg++ progvh2.cc progvh2.cc:29:13: warning: missing terminating " character progvh2.cc:29: error: missing terminating " character progvh2.cc:30:21: warning: missing terminating " character progvh2.cc:30: error: missing terminating " character progvh2.cc: In function `int main()': progvh2.cc:20: error: `cuot' was not declared in this progvh2.cc:21: error: expected `;' before `cin' progvh2.cc:24: error: `cout' was not declared in this progvh2.cc:25: error: `cin' was not declared in this progvh2.cc:25: error: `luku2' was not declared in this progvh2.cc:28: error: `endl' was not declared in this progvh2.cc:30: error: `Tulo' was not declared in this progvh2.cc:30: error: expected `;' before `on' progvh2.cc:39: error: expected primary-expression before `else' progvh2.cc:39: error: expected `;' before `else' progvh2.cc:16: warning: unused variable `luku' progvh2.cc:17: warning: unused variable `summa' progvh2.cc:43: error: expected `}' at end of input proffa>
OHJ-1101 Ohjelmointi 1e 2008-09 2 In function int main()' kertoo, mistä osasta ohjelmaa seuraavat virheilmoitukset tulevat. Tämä ohjelma on niin pieni, että siinä ei ole kuin pääohjelma main. Jokaisen virheen alussa lukee, mitä tiedostoa ja riviä se koskee. Joissakin virheilmoituksissa on myös sarakkeen numero: progvh2.cc:29:13: warning: missing terminating character
OHJ-1101 Ohjelmointi 1e 2008-09 3 error: `cout' was not declared in this error: `cin' was not declared in this error: `endl' was not declared in this Jos kääntäjä valittaa, että C++:n standardikirjaston (cstdlib) sisältämät asiat tai syöteja tulostekirjaston (iostream) sisältämät asiat ovat määrittelemättömiä, ensimmäisenä kannattaa tarkistaa, että kyseinen kirjasto on otettu mukaan koodin alussa. #include <cstdlib> #include <iostream> Jos kirjasto on mukana, täytyy virheilmoitusten johtua siitä, että nimiavaruus std ei ole käytössä. using namespace std; Tai sitten kysymyksessä on kirjoitusvirhe. Tarkkana... :)
OHJ-1101 Ohjelmointi 1e 2008-09 4 error: expected `;' before `cin' error: expected `}' at end of input error: expected primary-expression before `else' Virheilmoituksesta kannattaa huomata sana "ennen". Virhe on mainitussa kohdassa tai sitä aikaisemmin. Kääntäjä ei aina osaa ilmoittaa tarkkaa rivinumeroa. Suurin osa kääntäjän antamista virheilmoituksista on kielioppivirheitä ( parse error ). Kääntäjä ei pysty jäsentämään koodia oikein. Kielioppivirheitä tulee aina, kun unohtaa jonkin olennaisen välimerkin: puolipisteen, jotkin sulut, jonkin operaattorin... Joskus kääntäjä sekoaa virheiden kohdalla ja sen jälkeen saattaa tulla kummallisia virheilmoituksia kaikilta seuraavilta riveiltä. Kannattaa korjata (muutama) ensimmäinen virhe ja kääntää sen jälkeen uudelleen.
OHJ-1101 Ohjelmointi 1e 2008-09 5 error: no match for `operator>>' in `std::cout >> "Anna toinen luku: "' Virheilmoitus kannattaa aina lukea loppuun asti, vaikka se olisi ihan kummallisen näköinen. Loppujen lopuksi ilmoitukset ovat vain englantia ja sanakirjan kanssa niistä selviää. Tässä tapauksessa olennainen sana on "operator". Operaattorissa on jotain väärin...
OHJ-1101 Ohjelmointi 1e 2008-09 6 error: `luku2' was not declared in this Mainitulla rivillä käytetään muuttujaa, jota ei ole määritelty aikaisemmin. Virheilmoitus näyttää aivan samalta, kuin siinä tapauksessa, että on unohdettu sanoa using namespace std.
OHJ-1101 Ohjelmointi 1e 2008-09 7 warning: unused variable `luku' warning: missing terminating " character Varoitukset eivät estä ohjelman kääntymistä, mutta kääntäjä arvelee, että ohjelmassa on silti jotain pahasti pielessä. Kokeile vaikka! Käännä ohjelma huomioimatta varoituksia. Toimiiko se? Kääntäjän antamat varoitukset kannattaa aina ottaa tyytyväisenä vastaan. Ne helpottavat ohjelmoijan työtä.