Toon posts:

[C] Request for member in something not a structure/union

Pagina: 1
Acties:
  • 164 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Een beetje basic, maar ik zit een linked list te maken in C. Ik heb het volgende:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
typedef struct _ResList {
    int res;
    struct ResList *next;
} ResList;

void AddToResList(ResList **resList, int r) {
    while (resList->next != NULL) { // geeft foutmelding
        resList = resList->next; // geeft foutmelding
    }

    ResList *temp = malloc(sizeof(ResList));
    temp->res = r;
    temp->next = NULL;
    resList->next = temp; // geeft foutmelding
}


maar die geeft op de aangegeven plaatsen bij het compileren de volgende foutmelding:

error: request for member `next' in something not a structure or a union.

Wat doe ik nou fout?

[ Voor 15% gewijzigd door Verwijderd op 26-06-2006 20:21 ]


  • scorpie
  • Registratie: Augustus 2001
  • Laatst online: 23:16

scorpie

Supra Addict

Hij valt denk ik over je underscore, die je bij je typedef wel gebruikt, maar nergens anders.. (of ik zie het fout natuurlijk ;p )

wil een Toyota Supra mkIV!!!!! | wil een Yamaha YZF-R{1,6} | wil stiekem ook een Ducati
"Security is just a state of mind"
PSN: scorpie | Diablo 3: scorpie#2470


  • Emmeau
  • Registratie: Mei 2003
  • Niet online

Emmeau

All your UNIX are belong to us

regel 4, moet er geen ; achter de reslist?

If you choose to criticise you choose your enemies


  • Amras
  • Registratie: Januari 2003
  • Laatst online: 01-10-2025
Volgens mij is het
C:
1
*resList->next

ipv
C:
1
resList->next

:)

  • The Fox NL
  • Registratie: Oktober 2004
  • Laatst online: 14-02 22:37
misschien omdat je _ResList ipv Reslist moet gebruiken in regel 3?
Volgens mij doe je met die ResList op regel 4 een variabele aanmaken die ResList heet. En die variabele kan je dan niet gebruiken in de vorm die jij daar gebruikt.

[ Voor 20% gewijzigd door The Fox NL op 26-06-2006 20:27 ]


Verwijderd

Topicstarter
The Fox NL schreef op maandag 26 juni 2006 @ 20:22:
misschien omdat je _ResList ipv Reslist moet gebruiken in regel 3?
Volgens mij doe je met die ResList op regel 4 een variabele aanmaken die ResList heet. En die variabele kan je dan niet gebruiken in de vorm die jij daar gebruikt.
Tnx, dat was het! :)

  • donzz
  • Registratie: Maart 2006
  • Laatst online: 14-02 09:51
Amras schreef op maandag 26 juni 2006 @ 20:21:
Volgens mij is het
C:
1
*resList->next

ipv
C:
1
resList->next

:)
klopt.. of:
code:
1
void AddToResList(ResList *resList, int r) { ...

alles kan kapot; beter dat ik het nu test dan dat er straks iemand komt klagen


  • Robtimus
  • Registratie: November 2002
  • Laatst online: 20:17

Robtimus

me Robtimus no like you

Amras schreef op maandag 26 juni 2006 @ 20:21:
Volgens mij is het
C:
1
*resList->next
Volgens mij zelfs
C:
1
(*resList)->next
omdat
C:
1
*resList->next
wordt gezien als
C:
1
*(resList->next)

More than meets the eye
There is no I in TEAM... but there is ME
system specs


  • Amras
  • Registratie: Januari 2003
  • Laatst online: 01-10-2025
IceManX schreef op maandag 26 juni 2006 @ 20:42:
[...]
Volgens mij zelfs
C:
1
(*resList)->next
omdat
C:
1
*resList->next
wordt gezien als
C:
1
*(resList->next)
Je hebt gelijk: Precedence table :)

Toch vaker oefenen met C. :+

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 19-02 19:34

.oisyn

Moderator Devschuur®

Demotivational Speaker

The Fox NL schreef op maandag 26 juni 2006 @ 20:22:
misschien omdat je _ResList ipv Reslist moet gebruiken in regel 3?
Volgens mij doe je met die ResList op regel 4 een variabele aanmaken die ResList heet. En die variabele kan je dan niet gebruiken in de vorm die jij daar gebruikt.
Nee, geen variabele, maar een type (er staat typedef voor de struct definitie). Als je in C een struct S definieert, dan kun je dat type alleen gebruiken als je letterlijk struct S gebruikt:

C:
1
2
3
4
5
6
7
struct S
{
    int foo;
};

S myS; // error, S bestaat niet
struct S myS; // ok


Om echt een type te maken die je kunt gebruiken om je variabelen mee te definieren gebruik je typedef:
C:
1
2
typedef struct S S_type;
S_type myS; // ok

De topicstarter doet beide in één (een typedef met daarin meteen de definitie van de struct). Het probleem is echter dat de typedef pas "klaar" is na de semicolon, en je hebt binnen de struct al een referentie naar hetzelfde type nodig. Er is dan geen andere uitweg om gewoon de struct definitie zelf te gebruiken, dus struct _ResList

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.

Pagina: 1