Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Loputtoman sisällytyksen kierto

Gaxx [05.10.2007 17:19:03]

#

Minulla on tiedostot:

***ukko.h

#include "kartta.h"

#ifndef ukko
#define ukko

class Ukko {
    Kartta *osoite;
    ...
};

#endif
***kartta.h

#include "ukko.h"

#ifndef kartta
#define kartta

class Kartta {
    Ukko *osoite;
    ...
};

#endif

Tästä luonnollisesti seuraa loputon include-kierre. Kuinka tällainen tilanne ratkaistaa, jossa ukko.h:ssa tarvitaa kartta.h:ssa esiteltyjä juttuja ja kartta.h:ssa ukko.h:ssa esiteltyjä juttuja?

folio [05.10.2007 17:28:32]

#

Laittamalla includen tuonne if-lohkon sisään?

Pekka Karjalainen [05.10.2007 17:33:47]

#

Voit laittaa yhteiset asiat kolmanteen otsikkotiedostoon, josta ne otetaan kumpaankin käyttöön. Keskenään viittaavista luokista selviät luokan etukäteisesittelyllä.

Se on englanniksi "forward declaration" (jos haluat googlata) ja olisi sinun tapauksessasi siis vain rivi

class Ukko;

tai

class Kartta;

Jos teet näin, luokan instansseja voi käsitellä osoittimien kautta, mutta ei kovin monin muin tavoin. Kääntäjä ei vielä tiedä ennen itse määritelmän antamista minkä kokoisia ne ovat, joten funktiosta palauttaminen ym. ei taida onnistua ollenkaan. En muista ihan tarkkaan, mikä on mahdollista, mutta tieto on kyllä C++-standardissa ja voit kysellä lisää sen tuntijoilta.

Gaxx [05.10.2007 18:02:46]

#

Jep, kokeilin tuota Markuksen tapaa ennen, kuin postasin tänne, mutta se valitti jotain sellaista, mistä en ottanut selvää. Sain nyt kuitenkin selville syyn: otsikkotiedosta vasstaavassa .cpp:tiedostossa oli sisällytetty samainen otsikkotiedosto.

Tuskimpa ymmärsitte :)

Ongelma on kuitenkin ratkennut, kiitoksia vastauksista!

Edit: Jaha, Markuksen viesti tais hävitä johonkin O_o.

Vastaus

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

Tietoa sivustosta