Moro,
kirjoitin yhdestä C++ -oppaasta seuraavan ohjelman, mutta en saa sitä toimimaan.
#include <iostream.h> void main() { enum Paivat { Sunnuntai, Maanantai, Tiistai, Keskiviikko, Torstai, Perjantai, Lauantai }; Paivat vapaaPaiva; cout << "Minka paivan haluat pitaa vapaata (0-6)? "; cin >> vapaaPaiva; if (vapaaPaiva == Sunnuntai || vapaaPaiva == Lauantai) cout << "Viikonloppu on vapaata muutenkin!\n"; else cout << "Ok. pannaan muistiin\n"; }
Kääntäjä pukkaa seuraavat ilmoitukset:
f:\cpp\opetai~1\379e57~1.cpp: In function `int main(...)':
f:\cpp\opetai~1\379e57~1.cpp:9: initializing non-const `int &' with `main(...)::Paivat' will use a temporary
C:\DEV-C_~1\Include\G__~1\iostream.h:206: in passing argument 1 of `istream::operator >>(int &)'
Kun poistan rivin "cin >> vapaaPaiva;", kääntäjän virheilmoitukset häviävät.
Käyttämäni ympäristö on DevC++ 4.
Kertokaa mitä tein väärin?
Helpoin tapa on muuttaa vapaaPaiva:n tyypiksi int. Muutenkaan ei taida olla mikään kovin laadukas opas, nimittäin <iostream.h> on vanhentunut ja sen tilalla tulisi käyttää <iostream>:a. void main() ei ole myöskään C++ -standardin mukainen, vaan tulisi käyttää int main():a.
Ensinäkin, se on std::cout ja std::cin.
Toiseksi, eikös C++:ssa se ole int main() {}?
Ratkaisu on lukea uudenpaa C++ opasta, joka ymmärtää nimiavaruuksia.
Edit: lisätään nyt linkkikin:
http://www.cplusplus.com/doc/tutorial/
Heh, aikas nopeesti sait kyl monta vastuasta :)
Kiitos kaikille!
Katsoin vähän tarkemmin tuon oppaan tietoja:
Kirja on kirjoitettu vuonna 1994 ja C++ on varmaan "hieman" kehittynyt sen jälkeen...
Eiköhän perimmäinen syy ole se, että Paivat on oma enum-tyyppinsä ja että istreamin >>-operattoria ei ole määritelty sille tyypille. Tarpeen tullen enum muuntuu automaattisesti sopivaksi kokonaislukutyypiksi, mutta toisin päin homma ei toimi. Muunnos luo yleensä tilapäisen arvon, jota ei voi käyttää viittausparametrina.
Kiertotie on käyttää esimerkiksi intiä enumin sijasta. Mikäli enumin arvoalue on sopiva, enum voidaan aina sijoittaa intiin ja intiä voidaan esmes vertailla enumiin.
Älä lue noin vanhaa C++-opasta. Kieli on ehditty mm. standardoida vuoden 1994 jälkeen ja tuossa esimerkkipätkässä on paljon ei-standardinmukaista tavaraa.
Aihe on jo aika vanha, joten et voi enää vastata siihen.