Olen tekemässä pienimuotoista valintanappi-luokkaa.
Alla oleva koodi kääntyy, mutta ei toimi. Miksi näin?
Koodin pitäisi toimia niin, että aluksi määritellään valintanapit ja sitten ryhmä, jonka valinnat vaikuttavat toisiinsa.
class CheckBox { public: bool selected; int x, y; char * teksti; void Piirra(); }; class CheckBoxGroup { public: void AddBox(CheckBox Boxi); CheckBox CheckBoxes[10]; void Update(); private: int Used; }; void CheckBoxGroup::AddBox(CheckBox boxi) { CheckBoxes[Used] = boxi; Used++; return; } void CheckBoxGroup::Update() { for (int i = 0; i < Used; i++) { if (OsuukoHiiri(CheckBoxes[i].x, CheckBoxes[i].y, Hiiri.x, Hiiri.y, 31, 31)) { if (Hiiri.hiiri & SDL_BUTTON(1) && !Hiiri.pohjassa) { CheckBoxes[i].selected = true; Hiiri.pohjassa = true; } } } } // MÄÄRITELLÄÄN CheckBox Boksi1; CheckBox Boksi2; CheckBoxGroup TesiBoksit; //Alustetaan tms. PeliModeGroup.AddBox(AgainstBot); PeliModeGroup.AddBox(AgainstClock); //looppiin PeliModeGroup.Update();
Niin, ja tässä on siis vain osa koodista
Ryhmässä haluat varmaankin käsitellä niitä osoittimina. Jos annat parametrina luokan, siitä luodaan funktiota varten uusi samanlainen kopio. Jotta funktiossa käsiteltäisiin oikeasti samaa oliota, sinne pitää lähettää osoitin tai viittaus. Suosittelen noin yleisestikin tutustumista osoittimiin.
Olisi kovin ystävällistä aina kertoa myös, millä tavalla koodi ei toimi.
Tätä arvelinkin, mutta C++ ei ole minulle vielä niin tuttu. Koitin katsoa osottimia ja viittauksia Hassunhauskasta c++ oppaasta mutta asia ei valjennut minulle sitä kautta.
Koodi ei siis vain tee mitään.
Eli lähinnä haluasin tietää miten nuo osoittimen ja viittaukset tuossa tapauksessa laitettaisiin.
class CheckBoxGroup { //... osoittimia laatikoihin // vector-systeemillä saisi vielä tuon niin, ettei se rajoitu kymmeneen. CheckBox * CheckBoxes[10]; // ja osoitinten kanssa siis CheckBoxes[i]->x, eli pisteen paikalle nuoli // Mikään ei myöskään takaa, että Used olisi alussa nolla. Siksipä kannattaa tehdä tuolle luokalle luojafunktio, jota kutsutaan automaattisesti, kun uusi yksilö luodaan. CheckBoxGroup(); //... osoitin laatikkoon void AddBox(CheckBox *boxi); } // se luojafunktio CheckBoxGroup::CheckBoxGroup() : Used(0) // Used on alussa nolla. { // Täällä voisi sitten kaikkea tehdä, mutta mitäpä sitä turhia... } Group.AddBox(&Uusi_Hieno_Laatikko); // &-merkki tekee osoittimen
Aihe on jo aika vanha, joten et voi enää vastata siihen.