PDA

View Full Version : [C] Strano passaggio per riferimento


Lelex82
28-04-2008, 11:33
Salve ho questo pezzo di codice,


446 void INORDER_TREE_WALK_DEL (treenode **node, int chi)
447 {
448 if (node!=NULL)
449 {
450 INORDER_TREE_WALK_DEL (&node->left,chi);
451 if (node->key>chi)
452 {
453 //printf("sto per eliminare il nodo %d\n",node->key);
454 TREE_DELETE (&node,node);
455 //printf("ho eliminato il nodo %d\n",node->key);
456 }
457
458 INORDER_TREE_WALK_DEL (&node->right,chi);
459 }
460 }
devo passare per riferimento il valore di node, il compilatore mi da i seguenti errori

# gcc34 ProvaInorderDEL.c -o ProvaInorderDEL
ProvaInorderDEL.c: In function `INORDER_TREE_WALK_DEL':
ProvaInorderDEL.c:450: error: request for member `left' in something not a structure or union
ProvaInorderDEL.c:451: error: request for member `key' in something not a structure or union
ProvaInorderDEL.c:454: warning: passing arg 1 of `TREE_DELETE' from incompatible pointer type
ProvaInorderDEL.c:454: warning: passing arg 2 of `TREE_DELETE' from incompatible pointer type
ProvaInorderDEL.c:458: error: request for member `right' in something not a structure or union

come posso risolvere?

Lelex82
28-04-2008, 11:41
si ho provato cn le parentesi,ma l'errore č uguale.
il tipo treenode č corretto. il problema č il passaggio per riferimento,anche perchč se passo per valore la funzione mi funziona,ma i valori ritornati non sono quelli desiderati.

Lelex82
28-04-2008, 11:45
si ho visto,il problema resta il passaggio del valore node che deve essere per riferimento. usare *node nn mi č utile.

wingman87
28-04-2008, 14:25
Hai provato cosė?
&((*node)->right)
Non sono sicuro che le parentesi pių interne servano, ma qualche parentesė in pių non fa male...

Lelex82
29-04-2008, 11:50
grazie per la risposta mi č servita ;)