Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Tietueiden "esittely"

Sivun loppuun

Aruviel [26.07.2004 09:42:36]

#

Otsikko sen jo lähestulkoon kertoo. Eli ongelmana on se, että ensimmäinen struct tarvitsee käyttöönsä toista structia, joka taas on määritelty vasta ensimmäisen structin jälkeen. Miten tämän ongelman voisi kiertää? Ongelmana on siis tämä:

struct A
{
  B banda;
};

struct B
{
  A ankka
};

Enempää en oikein osaa sanoa. Kaipa siihen jokin (ehkäpä aika yksinkertainenkin?) ratkaisu on?

hunajavohveli [26.07.2004 10:23:18]

#

Auttaisiko, jos esittelisit B:n ennen A:ta?

Aruviel [26.07.2004 10:29:59]

#

Mutta jos esittelen B:n ennen A:ta niin silloin se ei "löydä" A:ta :)

Edit: No heitän nyt sitten sen koodin ihan kokonaisuudessaan, johon yritän jotain tolkkua saada.

struct Files
{
  string map;
  string object_map;
};

struct Creature
{
  string name;
  char type;
  int color;
  int posx, posy;
  string lastlvl;
  Level* current_lvl;
};

struct Tile
{
  int x, y;
  unsigned int attributes;
  unsigned short int material;
  char type;
  int color;
  Creature* creature;
  string arealink;
  string areacoord;
};

struct Level
{
  Tile LevelMap[max_x][max_y];
  Tile TileMap[max_x][max_y];
  Files files;
};

Eli ongelmana on juuri se, että jokin näistä pitäisi aina olla ennen toista määriteltynä, mikä taas johtaa uusiin ongelmiin. Ehkäpä pitäisi vain suunnitella asioita uusiksi?

hunajavohveli [26.07.2004 10:43:11]

#

Siis olet luomassa structia A johon sisältyy struct B, johon sisältyy struct A, johon sisältyy struct B, johon sisältyy struct A jne...?
Siitähän seuraisi loputon ketju, eikä se minun mielestäni ainakaan voi onnistua.

Aruviel [26.07.2004 10:50:49]

#

Hei, loistavaa! Tuon järkeilyn innoittamana pistän koko roskan uusiksi. Kiitoksia.

hunajavohveli [26.07.2004 11:41:10]

#

Sinänsä ideassasi ei varmaan ollut mitään vikaa, mutta olit vain järkeillyt asian toteutuksen väärin. Veikkaisin, että se mitä yritit tehdä, onnistuu kuitenkin toisella tavalla.

Metabolix [26.07.2004 12:49:08]

#

Jatkanpa tähän samaan:

typedef void (*TOnClick)(TMenuItem);
class TMenuItem
{
public:
  TOnClick *OnClick;
};

Eli osoitin funktioon, joka ottaa TMenuItemin parametrinä, mutta TMenuItemia ei ole määritetty vielä. Osaako joku auttaa?

firebug [26.07.2004 15:01:15]

#

Pistä

class TMenuItem;

ennen tuota typedeffiä.


Sivun alkuun

Vastaus

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

Tietoa sivustosta