Eli tässä hieman jo väsyneenä mietin, että meneekö seuraavanlainen määrittely oikein (kääntäjää ei käytettävissä viikonloppuna)
#include <string> class Sotilas { private: unsigned int id; // Sotilaan tunnistenumero std::string nimi; // Sotilaan yksilöllinen nimi unsigned int toiminto; // Kertoo sotilaan nykyisen toiminnan unsigned int energia; unsigned int moraali; unsigned int suunta; // Mihin suuntaan sotilas katsoo // Sotilaan sijainti kartalla struct sijainti { unsigned int x, y, z, s; } public: Sotilas() ~Sotilas() };
Tässä määrittelyssä tuo sijainti struct tuottaa päänvaivaa, eli pystynkö luokan jäsenellä asettamaan sijainti.x = 1 tai sijainti.y = 2 ilman että täytyy luoda kyseinen tyyppi: sijainti sijainti;
Toivottavasti ymmärsitte mitä ajoin takaa tässä...
Itse tekisin näin:
EDIT: siis näin:
class Sotilas { private: unsigned int id; // Sotilaan tunnistenumero std::string nimi; // Sotilaan yksilöllinen nimi unsigned int toiminto; // Kertoo sotilaan nykyisen toiminnan unsigned int energia; unsigned int moraali; unsigned int suunta; // Mihin suuntaan sotilas katsoo // Sotilaan sijainti kartalla struct Sijainti { unsigned int x, y, z, s; }sijainti; public: Sotilas(){}; ~Sotilas(){}; };
Ja vielä kysymykseesi, ei onnistu ilman, että teet "sijainti sijainti".
Varmaankin pelissä on myös muita asioita, joilla on sijainti, joten loogista olisi sijoittaa Sijainti rakenteena aivan erilleen ja käyttää sitä samaa kaikissa paikoissa.
Jos kuitenkin välttämättä haluat sen tuonne sisään, niin itse jäsenellä täytyy olla nimi, muuten mitään jäsentä ei tule.
struct A { // Rakenteen nimi on A::B, jäsenmuuttujan nimi on b. struct B { int x; } b; // Rakenteella ei ole nimeä (A::nimetön), jäsenmuuttujan nimi on c. struct { int x; } c; // Rakenteen nimi on A::D. Yhtään D-tyyppistä jäsenmuuttujaa ei tässä tule! struct D { int x; }; }; // sizeof(A) == 2 * sizeof(int)
Huomaa myös, että jokainen rakenteen määrittely päättyy puolipisteeseen, olipa siinä samassa jäsenmuuttujan esittely tai ei.
Hmm... kiitoksia tuosta sijaintivinkistä, se on kyllä kaikista loogisinta sijoittaa pois tuolta sisältä. Samalla kyllä tässä opin uusiakin asioita, kiitoksia avusta.
Aihe on jo aika vanha, joten et voi enää vastata siihen.