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?
Laittamalla includen tuonne if-lohkon sisään?
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.
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.
Aihe on jo aika vanha, joten et voi enää vastata siihen.