Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++ Struct kysymys

Daih [12.12.2009 00:55:14]

#

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ä...

vehkis91 [12.12.2009 01:00:32]

#

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".

Metabolix [12.12.2009 01:15:30]

#

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.

Daih [12.12.2009 01:19:48]

#

Hmm... kiitoksia tuosta sijaintivinkistä, se on kyllä kaikista loogisinta sijoittaa pois tuolta sisältä. Samalla kyllä tässä opin uusiakin asioita, kiitoksia avusta.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta