[C] 'nep' struc maken

Pagina: 1
Acties:

  • im_ik
  • Registratie: November 2000
  • Laatst online: 28-12-2025

im_ik

dat ben ik dus

Topicstarter
Sorry de simple vraag maar ik kon het niet vinden via google of de verkeerde termen gebruikt..

Ik wil een struct maken die kan pointer'en naar een andere stuct :)
Allen tijdens het compileren kent A B nog niet dus error..
Maar hoe maak ik een B aan zonder hem echt aan te maken.??.(want anders kent B, A weer niet)
code:
1
2
3
4
5
6
7
8
9
10
typedef struct
{
    int data;
    B *b;   // pointer naar een B
}A;

typedef struct
{
    A* a;  // pointer naar array van A
}B;

Atari Terminator AI - LegoBlockX3 = ᒢᐩᐩ.ᒡᒢᑊᒻᒻᓫᔿ.ᣳᣝᐤᣜᣳ.ᐪᓫᣗᔿᑊᣕᣔᐪᐤᣗ.T008ᖟ


  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

code:
1
2
3
4
5
6
7
8
9
typedef struct TA{
    int data;
    TB *b;
};

typedef struct TB{
{
    TA* a;
};

Zo?

PS: Mn C is een beetje roestig...

We adore chaos because we like to restore order - M.C. Escher


  • whoami
  • Registratie: December 2000
  • Laatst online: 29-08 15:58
Geef allereerst eens j structs een naam:
dus zo:
code:
1
2
3
4
typedef struct  MyStruct
{
   int data;
};


Als je nu wil dat een type van struct B in member is in A, dan moet je eerst B 'voordefinieren':
code:
1
2
3
4
5
6
7
8
9
10
11
12
typedef struct B;

typedef struct A
{
   int data;
   B*  ptrB;
}

typedef struct B
{
   A* a;
}

https://fgheysels.github.io/


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 05:00
(jarig!)
whoami's oplossing klopt wel, maar de code niet. Je kunt helaas types niet voordefinieren; je zult dat echt met structs moeten doen. Sowieso moet je een identifier meegegeven bij het definieren van een struct als type. Correcte code zou zijn:

C:
1
2
3
4
5
6
7
8
9
10
11
struct B;

struct A
{
    struct B*  ptrB;   
};

struct B        
{
    struct A* a;        
};


Of als je je types toch wilt definieren als types:
C:
1
2
3
4
5
6
7
8
9
10
11
struct B;

typedef struct A
{
    struct B*  ptrB;
} A;

typedef struct B
{
    A* a;       
} B;


Maar dit vind ik zelf minder mooi, omdat je nu 'struct B' in A's definitie moet zetten, maar niet 'struct A' in de definitie van B.

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 05:00
(jarig!)
Even voor de duidelijkheid; ik zie zowel whoami als LordLarry de volgende code plaatsen:

C:
1
2
3
4
typedef struct  MyStruct
{
   int data;
};


Dit kan dus niet in C. Je moet ofwel de naam van je type specificeren, ofwel de typedefinitie weglaten en uitsluitend de struct definieren. Met "struct X { }" definieer je een structure met identifier X; met "typedef struct { } Y;" definieer je een anonieme structure en een bijbehorend type Y; met "typedef struct X { } Y;" combineer je beiden en definieer je dus een structure X en een bijbehorend type Y.

  • whoami
  • Registratie: December 2000
  • Laatst online: 29-08 15:58
Soultaker schreef op 07 november 2002 @ 20:06:
Even voor de duidelijkheid; ik zie zowel whoami als LordLarry de volgende code plaatsen:

C:
1
2
3
4
typedef struct  MyStruct
{
   int data;
};


Dit kan dus niet in C. Je moet ofwel de naam van je type specificeren, ofwel de typedefinitie weglaten en uitsluitend de struct definieren. Met "struct X { }" definieer je een structure met identifier X; met "typedef struct { } Y;" definieer je een anonieme structure en een bijbehorend type Y; met "typedef struct X { } Y;" combineer je beiden en definieer je dus een structure X en een bijbehorend type Y.


Nouja, kan zijn. Ik heb geen ervaring met C.

https://fgheysels.github.io/


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 05:00
(jarig!)
whoami schreef op 07 november 2002 @ 20:12:
Nouja, kan zijn. Ik heb geen ervaring met C.
Nobody's perfect. ;) Maar ik dacht, ik zeg het even, want uit jou post kon ik niet opmaken dat je je code als voorbeeld/pseudocode had bedoelt. (Zoals ik al zei, klopte je idee wel).

  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Soultaker schreef op 07 november 2002 @ 20:06:
Even voor de duidelijkheid; ik zie zowel whoami als LordLarry de volgende code plaatsen:

C:
1
2
3
4
typedef struct  MyStruct
{
   int data;
};


Dit kan dus niet in C. Je moet ofwel de naam van je type specificeren, ofwel de typedefinitie weglaten en uitsluitend de struct definieren. Met "struct X { }" definieer je een structure met identifier X; met "typedef struct { } Y;" definieer je een anonieme structure en een bijbehorend type Y; met "typedef struct X { } Y;" combineer je beiden en definieer je dus een structure X en een bijbehorend type Y.
Kan best, ik zei nog dat mn C een beetje roestig was :) Bedankt voor de verbetering.

We adore chaos because we like to restore order - M.C. Escher


  • im_ik
  • Registratie: November 2000
  • Laatst online: 28-12-2025

im_ik

dat ben ik dus

Topicstarter
Soultaker schreef op 07 november 2002 @ 20:03:
Of als je je types toch wilt definieren als types:
C:
1
2
3
4
5
6
7
8
9
10
11
struct B;

typedef struct A
{
    struct B*  ptrB;
} A;

typedef struct B
{
    A* a;       
} B;


Maar dit vind ik zelf minder mooi, omdat je nu 'struct B' in A's definitie moet zetten, maar niet 'struct A' in de definitie van B.
* im_ik pinkt een traantje weg van geluk, dit werkt :)
Het is idd niet de mooiste oplossing....Maar dat komt later nog wel een keer..
Als ik wat meer C ervaring heb..

Atari Terminator AI - LegoBlockX3 = ᒢᐩᐩ.ᒡᒢᑊᒻᒻᓫᔿ.ᣳᣝᐤᣜᣳ.ᐪᓫᣗᔿᑊᣕᣔᐪᐤᣗ.T008ᖟ


  • Daspeed
  • Registratie: Maart 2001
  • Laatst online: 00:44
Als je dan toch zo graag allebei de structs soort van symetrisch wil hebben, waarom doe je dan niet dit:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
struct SB;

typedef struct SA
{
    SB* b;
    int getal;
}A;

typedef struct SB
{
    SA* a;
    int getal;
}B;


Edit: oops sorryz, was ff vergeten dat het om C ging en niet c++ 8)7

[ Voor 0% gewijzigd door Daspeed op 07-11-2002 20:32 . Reden: Foutje... ]


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 29-08 03:21

.oisyn

Moderator Devschuur®

Demotivational Speaker

je kunt een typedef overigens ook toepassen op een incomplete type (in dit geval dus een struct waarvan de inhoud nog niet bekend is)

dus zo:

C:
1
2
3
4
5
6
7
8
9
10
11
12
typedef struct A A;
typedef struct B B;

struct A
{
    B * ptrB;
};

struct B
{
    A * ptrA;
};

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 29-08 03:21

.oisyn

Moderator Devschuur®

Demotivational Speaker

DrClearbottom schreef op 07 november 2002 @ 20:26:
Als je dan toch zo graag allebei de structs soort van symetrisch wil hebben, waarom doe je dan niet dit:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
struct SB;

typedef struct SA
{
    SB* b;
    int getal;
}A;

typedef struct SB
{
    SA* a;
    int getal;
}B;


dat werkt dus niet, dat heeft Soultaker hierboven al uitgelegd
als je SB wilt gebruiken dan zul je struct SB moeten schrijven (er is tenslotte nog geen type SB gedefinieerd). Dit is een verschil tussen C en C++

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • im_ik
  • Registratie: November 2000
  • Laatst online: 28-12-2025

im_ik

dat ben ik dus

Topicstarter
.oisyn schreef op 07 november 2002 @ 20:28:
je kunt een typedef overigens ook toepassen op een incomplete type (in dit geval dus een struct waarvan de inhoud nog niet bekend is)
Kijk das handig om te weten..
En het ziet er wat beter uit in de code :)
* im_ik leert elke dag weer wat..

Atari Terminator AI - LegoBlockX3 = ᒢᐩᐩ.ᒡᒢᑊᒻᒻᓫᔿ.ᣳᣝᐤᣜᣳ.ᐪᓫᣗᔿᑊᣕᣔᐪᐤᣗ.T008ᖟ

Pagina: 1