Oon nyt koittanut vääntää ja kääntää, mutta oon mennyt suoraan sanoeni aivan totaalisesti sekaisin noista pointtereista yms. Siis tajuan kyllä perusajatuksen, mutta sitten hieman hankalampaa hommaa en ymmärräkään.
Eli selitänpä ongelman.
mainin sisällä mulla on pointterin luonti tällain:
Uint8* nappi;
Ja jos käytän sitä normaalisti mainin sisällä funktiolla:
nappi = SDL_GetKeyState(NULL);
homma toimii, ja saan luettua näppäimet ok.
Mutta sitten, jos haluaisin sen laitettua funktioon asia ei enää toimikaan:
void LueSyotteet(Uint8* nappi) { nappi = SDL_GetKeyState(NULL); return; } //mainissa kutsun näin LueSyotteet(nappi);
mitään virhettä ei tule, mutta ohjelma käy nopeasti päällä ja sammuu heti.
Eli mikä voi olla vikana vai onko mikään?
Toinen kysymys:
Mulla on funktio joka toimii ja lataa mulle tekstuurin, mutta kysyn, että kummin päin pointterit yms. pitää laittaa että funktiolle lähetetään vain muuttujan osoite ja muokkaa siten muuttujaa, eikä koko tekstuurin dataa vai toimiiko se jo nyt niin?
Eli pitääkö mainissa laittaa &-merkkia vai funktion esittelyssä vai jotain muuta?
Eli koodia:
//mainista kutsu lataaTekstuuri("intro.png", textuuri) //ja itse funktio int lataaTekstuuri(char *fileName, GLuint &tekstuuri) { }
En viitsinyt koko funktiota laittaa, mutta jos sen tarvitsee niin kysykää..
LueSyotteet() ottaa pointterin 8-bittiseen kokonaislukuun, muuttaa sitä ja palautuu. Sama homma kuin ottaisi pelkän kokonaisluvun, eli parametrin kopiota muutetaan ja muutokset eivät tietenkään heijastu alkuperäiseen muuttujaan. Muutosten täytyy kohdistua muuttujaan, johon kopioitu parametri osoittaa/viittaa, eli Uint8** nappi, johon luetaan sitten *nappi = SDL_GetKeyState(NULL), eli napin osoittamaa tietoa muokataan, ei nappi-muuttujaa itseään.
Jälempi näyttää ihan oikealta, mitänyt "intro.png" palauttaa const char -pointterin, jota tyyppiä myös fileNamen olisi hyvä olla, koska tiedostonimeä ei tarvitse muuttaa kutsuvaan paikkaan. Sanottaessa pelkästään textuuri kääntäjä päättelee kontekstista tarvitaanko textuurin arvoa vai viittausta siihen. Funktion esittelyssä & tarvitaan, koska GLuint on eri tyyppiä kuin GLuint&.
Toivottavasti ei tullut pahoja asiavirheitä, kun näin aamusella kirjoittelin.
Tai sitten ehkä suositeltavampi tapa käyttää viittausta, jolloinka funktio menisi muotoon:
void LueSyotteet(Uint8*& nappi) { nappi = SDL_GetKeyState(NULL); return; }
Ja kutsuttaisiin suoraan:
Uint8* nappi; LueSyotteet(nappi);
Gaxx kirjoitti:
Tai sitten ehkä suositeltavampi tapa käyttää viittausta
Joka on sitten C++:aa.
Joo noniin nyt toimii näppäimet taas! Kiitän suuresti vastauksista.
Aihe on jo aika vanha, joten et voi enää vastata siihen.