C: pekeren for å konstruere i struct definisjonen

stemmer
44

Hvordan kan jeg ha en peker til neste struct i definisjonen av denne struct:

typedef struct A {
  int a;
  int b;
  A*  next;
} A;

dette er hvordan jeg først skrev det, men det fungerer ikke.

Publisert på 03/02/2009 klokken 08:40
kilden bruker
På andre språk...                            


7 svar

stemmer
61

Man kan definere typedef og videre erklære struct første i ett setningen, og deretter definere struct i en etterfølgende definisjon.

typedef struct A A;

struct A
{
    int a;
    int b;
    A* next;
};

Edit: Som andre har nevnt, uten videre declaratation struct navn er fortsatt gyldig inne i struct definisjon (dvs. du kan brukes struct A), men typedef er ikke tilgjengelig før etter typedef definisjonen er ferdig (så bruker bare Aville ikke være gyldig ). Dette kan ikke noe for mye med bare ett pekeren medlem, men hvis du har en kompleks datastruktur med masse selv-type pekere, kan være mindre wieldy.

Svarte 03/02/2009 kl. 08:43
kilden bruker

stemmer
56

I tillegg til det første svaret, uten typedef og frem erklæringen, bør dette være i orden også.

struct A 
{ 
    int a; 
    int b; 
    struct A *next; 
};
Svarte 03/02/2009 kl. 08:45
kilden bruker

stemmer
17

Du mangler structførA*

  typedef struct A {
    int a;
    int b;
    struct A* next;
  } A;
Svarte 03/02/2009 kl. 08:48
kilden bruker

stemmer
12

Du kan gå uten videre erklæring:

struct A {
    int a;
    int b;
    struct A *next;
};
Svarte 03/02/2009 kl. 08:46
kilden bruker

stemmer
7

Vennligst, du er i C, ikke C ++.

Hvis du virkelig må typedef en struct (og de fleste programmerere som jeg jobber med ville not¹), gjør dette:

typedef struct _A {
    int a;
    int b;
    struct _A *next;
} A;

klart skille mellom _A(i structnavnerommet) og A(i type navnerommet).

¹ typedefskjuler størrelsen og lagring av den typen det peker til - argumentet (og jeg er enig) er at i et lavnivå språk som C, prøver å skjule noe er skadelig og mot sin hensikt. Bli vant til å skrive struct Anår du mener struct A.

Svarte 03/02/2009 kl. 21:34
kilden bruker

stemmer
0

Bruk følgende preprosessor:

#define structdef(NAME) typedef struct NAME NAME; struct NAME 

bruk:

structdef(node_t)
{
   void* value;
   node_t* next;
};
Svarte 21/01/2019 kl. 07:10
kilden bruker

stemmer
0
typedef struct {
 values
} NAME;

Dette er kortere vei til typedef en struct jeg tror det er den enkleste notasjon, bare ikke sette navnet infront men bak.

du kan da kalle det som

NAME n;  

NAME *n; // if you'd like a ptr to it.

Noe galt med denne tilnærmingen?

Svarte 14/12/2016 kl. 10:49
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more