Struktury v strukturach – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Struktury v strukturach – C / C++ – Fórum – Programujte.comStruktury v strukturach – C / C++ – Fórum – Programujte.com

 

19. 10. 2008   #1
-
0
-

Potrebuju udelat neco jako toto:



struct A{
B* b;
}

struct B{
C* c;
}

struct C{
A* a;
}


Problem je zrejmy - nezkompiluje se to, protoze v dobe definice A jeste neni znamo C, a nemuzu je seradit tak, aby se navzajem znaly, protoze jsou tri a tvori trojuhelnik.

Da se tohle nejak obejit? Zkousel jsem pred to dat toto:


struct A;
struct B;
struct C;


Ale to nefunguje.

Diky

Nahlásit jako SPAM
IP: 81.30.238.–
Prosím, jestli potřebujete s něčím poradit,zeptejte se na fóru. Jakýkoliv bezdůvodný pokus mě kontaktovat skončí okamžitým přidáním do ignore listu![br][br] Současný počet osob, které to nepochopily: 7
Ace McIntosh0
Super člen
19. 10. 2008   #2
-
0
-

Nefunguje? Co ti to hlásí za chybu? Vždyť je to klasická forward deklarace.

Tohle by mělo být naprosto správně:

struct B;

struct C;

struct A{
B* b;
};

struct B{
C* c;
} ;

struct C{
A* a;
} ;


EDIT: Na anglické Wikipedii je to docela dobře popsáno: http://en.wikipedia.org/wiki/Circular_dependency

Nahlásit jako SPAM
IP: 84.42.174.–
19. 10. 2008   #3
-
0
-

error C2143: syntax error : missing ';' before '*'
na radce kde je to B* b;

EDIT: ne, to je tam kdyz tam ta definice neni. Tohle to hlasi s ni:

'A::a' uses undefined struct 'B'

Nahlásit jako SPAM
IP: 81.30.238.–
Prosím, jestli potřebujete s něčím poradit,zeptejte se na fóru. Jakýkoliv bezdůvodný pokus mě kontaktovat skončí okamžitým přidáním do ignore listu![br][br] Současný počet osob, které to nepochopily: 7
Ace McIntosh0
Super člen
19. 10. 2008   #4
-
0
-

Musíš tam mít přístup k ukazateli na strukturu B, s takovouhle chybou to tam máš nějak takhle:

struct A{ 

B a;
};


a tobě to pak stačí upravit takto:

struct A{ 

B* a;
};


I když nevim jak to tam celé máš - tak, jak jsi uváděl v prvním příspěvku asi ne, protože to by takováto chyba snad nemohla nastat:-).

Nahlásit jako SPAM
IP: 84.42.174.–
KIIV
~ Moderátor
+43
God of flame
19. 10. 2008   #5
-
0
-

no nevim akorat jak to vypada cely ale kdyz uz se tam budou davat pointery tak rovnou muzes udelat jednu strukturu...

struct A {
A * ptr;
}

ale asi to nepude pokud to chces provazat se strukturama ktery sou jiny...

tak jak je to ale tu to jde...

nebo proste pouzit void * ptr; ... jen pak clovek musi jeste kdyz to chce pozit pretypovat

Nahlásit jako SPAM
IP: 80.250.27.–
Program vždy dělá to co naprogramujete, ne to co chcete...
KIIV
~ Moderátor
+43
God of flame
19. 10. 2008   #6
-
0
-

heh zahadne se mi to povedlo rozjet nejak takto

typedef struct A {
struct B {
struct C {
struct A * a;
} a ;
} a ;
} x;

:smile6: :smile6:
otazkou je jestli to bude fungovat :D


EDIT a v programu proslo:
struct A z;
z.a.a.a = &z;

Nahlásit jako SPAM
IP: 80.250.27.–
Program vždy dělá to co naprogramujete, ne to co chcete...
19. 10. 2008   #7
-
0
-

Vsecny ty truktury masi samozrejme hromadu dalsich parametru, do prvniho prispevku jsem napsal jen ty vztahy mezi nimi.

Delat to pres to voidy by se mi vubec nelibilo. Tady http://msdn.microsoft.com/en-us/library/9ekhdcxs(VS.80).aspx je popis te chyby na MSDN. Je tam i reseni, ale moc moudry z toho nejsem.

Nahlásit jako SPAM
IP: 81.30.238.–
Prosím, jestli potřebujete s něčím poradit,zeptejte se na fóru. Jakýkoliv bezdůvodný pokus mě kontaktovat skončí okamžitým přidáním do ignore listu![br][br] Současný počet osob, které to nepochopily: 7
KIIV
~ Moderátor
+43
God of flame
19. 10. 2008   #8
-
0
-

To CommanderZ : no oni tam pouzivaj deklaraci tridy pred definici ktera ji pouziva ale pokud nepouzijes tridy tak je ti to k nicemu...

Nahlásit jako SPAM
IP: 80.250.27.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Ace McIntosh0
Super člen
19. 10. 2008   #9
-
0
-

To CommanderZ : No, je to tam docela názorně, ale stejně - pokud to máš propletenější tak ti to asi přímo nepomůže (musíš podchytit korektně všechny závislosti apod.). Nemohl bys třeba postnout přesně ten kód který tam máš, pokud to není tajné?

Nahlásit jako SPAM
IP: 84.42.174.–
19. 10. 2008   #10
-
0
-

Aha, tak zda se ze je to pryc, stacilo ze struktur udelat tridy :)

Diky vam obema.

Nahlásit jako SPAM
IP: 81.30.238.–
Prosím, jestli potřebujete s něčím poradit,zeptejte se na fóru. Jakýkoliv bezdůvodný pokus mě kontaktovat skončí okamžitým přidáním do ignore listu![br][br] Současný počet osob, které to nepochopily: 7
KIIV
~ Moderátor
+43
God of flame
19. 10. 2008   #11
-
0
-

tak aspon ze se to vyresilo :)

Nahlásit jako SPAM
IP: 80.250.27.–
Program vždy dělá to co naprogramujete, ne to co chcete...
jouda
~ Anonymní uživatel
53 příspěvků
21. 10. 2008   #12
-
0
-

Zkousel jsem toto a zda se ze to funguje......



typedef struct A *pA;
typedef struct B *pB;
typedef struct C *pC;

struct A
{
pB ukaz_B;
};

struct B
{
pC ukaz_C;
};

struct C
{
pA ukaz_A;
};

typedef struct A TStruktura_A;
typedef struct B TStruktura_B;
typedef struct C TStruktura_C;

void main(int argc, char *argv[])
{
TStruktura_A sA;

sA ...
}

Nahlásit jako SPAM
IP: 212.20.106.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 22 hostů

Podobná vlákna

Struktury — založil Samuel Lehotský

Struktury — založil Matěj Andrle

Struktury v C++ — založil pin2k

Struktury — založil RePRO

Struktury - please help — založil Krang

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý