[ Angry-Someone @ 05.06.2008. 15:40 ] @
Primjer

Code:

struct Prva {

Prva prva; //ili funkcija, primjer(Prva *prva, string wtf);
Druga druga;   
};

struct Druga {

Druga druga;
Prva prva; 
};

Ovo je samo primjer, ja ubiti koristim liste i funkcije,
Ja imam implementaciju takvu i to mora tako biti, znači funkcija mora biti u strukturi i ne smije se mjenjati,
kad pokušam kompajlirati neće (devc++) i stvarno ne znam kako da to riješim i gdi je problem
Ako netko zna bio bih mu jako zahvalan!
[ BinaryRuler @ 05.06.2008. 17:36 ] @
Ja koliko znam funkciju nemozes da gurnes u strukturu.
Mozes da napravis klasu a ne strukturu.
pozz
[ Burgos @ 05.06.2008. 22:15 ] @
@SkyDiverX - Onda loše znaš. Naravno da je moguće.

@Angry-Someone, nije moguće uraditi to, jer upadaš u beskonačnu definiciju strukture. Drugim rečima, rekurzivna definicija klase ili strukture u programskom jeziku C++ nije moguća.

Međutim, moguće je uraditi ovo:

Code:

struct Prva {

    Prva* prva; 

    struct Druga {

        Druga* druga;
        Prva* prva; 
    };

    Druga druga;   
    void primjer(Druga* druga, Prva* prva);
};

typedef Prva::Druga Druga;
[ itf @ 06.06.2008. 12:20 ] @
Nema tu rekurzije ili beskonačnih petlji. Compiler neće dopustiti ovakvu deklaraciju varijable čisto iz razloga jer u tom trenutku nezna njegovu veličinu u memoriji (jer definicija tog objekta prethodno nigdje nije gotova), dok za pokazivač na taj objekt se zna kolika je njegova veličina (4 byte).
[ Burgos @ 06.06.2008. 14:30 ] @
@itf - ovo sa beskonacnom petljom sam lupio, priznajem, tek sada vidim.

Dalje, nema tu rekurzije (u pravom C-lish smislu reči :) ), ali postoji rekurzivna definicija klase, odn. strukture - prilikom koje stoji ovo što si naveo.
[ Goran Arandjelovic @ 07.06.2008. 16:22 ] @
itf jer u pravu, te i ne mora da bude onako ugnjezdena deklaracija strukture.

Code:


struct druga;

struct prva
{
  druga *d;
};

struct druga
{
  prva *p;
};



Dakle, samo forward deklaracija i ništa više. Razlika u layoutu klase i strukture (C++) ne postoji, već se samo razlikuje default pristup.
[ Burgos @ 08.06.2008. 22:06 ] @
Ne razumem. Kakve ima veze post Itf-a sa ugneždenom deklaracijom? Dalje, pitanje se nije odnosilo na to, već na deklaraciju objekta neke klase unutar iste.
[ kiklop74 @ 09.06.2008. 01:43 ] @
pa ljudi su ti lepo odgovorili:

Nije moguce deklarisati objekat koji je istog tipa kao i klasa ciji je clan zato sto u trenutku kompajliranja kompajler mora da zna kompletnu definiciju tipa/klase svakog objekta.

Ono sto jeste moguce je definisati pokazivac na objekat. Odnosno:

Code:

class test; // forward deklaracija

class test {
public:
  test() {}
  ~test() {}
  
private:
   test p; // ovo nije dozvoljeno
   test *p2; // ovo jeste dozvoljeno
};


[ Burgos @ 09.06.2008. 09:41 ] @
@kiklop, jasno mi je to. Samo, kakve veze ima ugneždena definicija klase/strukture sa tim?

PS. Nema veze, nije ovo advocacy, da potežemo besmislenu raspravu o nečemu već objašnjenom. Ignore me ;).