migf1 Δημοσ. 1 Νοεμβρίου 2012 Δημοσ. 1 Νοεμβρίου 2012 Ερωτηση... Ειχα γραψει καποιες συναρτησεις οι οποιες επερναν ορισματα για structures καποιου συγκεκριμενου τυπου... Τωρα θελω να ξανα χρησιμοιποιησω τις ιδιες συναρτησεις για αλλους τυπους δομων...Τα αλλάζω ολα οσα χρειαζονται και ο minGW μου πεταει μερικα warnings και αυτο assignment from incompatible pointer type [enabled by default] σε σημειο που κανω list = list->next; σε συναρτηση εισαγωγης κομβου πχ Kαμια ιδεα για τι τι μπορει να φταιει; Ευχαριστω Έχεις δηλώσει νέα πρότυπα για τις αλλαγμένες σου συναρτήσεις ή κατά λάθος χρησιμοποιείς τις δηλώσεις των παλιών τους υλοποιήσεων; Το warning που παίρνεις σημαίνει πως ο δηλωμένος τύπος του δείκτη list διαφέρει από τον δηλωμένο τύπο του δείκτη list->next.
nik324 Δημοσ. 1 Νοεμβρίου 2012 Δημοσ. 1 Νοεμβρίου 2012 Ολα οκ, το βρηκα...Ηταν τυπογραφικο λαθος...Αλλα που να το δω μεσα σε 100 γραμμες δηλωσεων δομων... Σκετη απογοητευση παντως...Μιαμιση ωρα τωρα το ψαχνω....Αν ειναι δυνατον.. Ολα οκ, το βρηκα...Ηταν τυπογραφικο λαθος...Αλλα που να το δω μεσα σε 100 γραμμες δηλωσεων δομων... Σκετη απογοητευση παντως...Μιαμιση ωρα τωρα το ψαχνω....Αν ειναι δυνατον..
migf1 Δημοσ. 1 Νοεμβρίου 2012 Δημοσ. 1 Νοεμβρίου 2012 Γιατί απογοήτευση; Πιθανότατα το έχεις κάνει πλέον κτήμα σου το συγκεκριμένο πρόβλημα, οπότε την επόμενη φορά θα το βρεις πολύ γρήγορα. ΥΓ. Πρόσφατα σπατάλησα περίπου 4 ώρες επειδή δεν θυμόμουν πως η fgets() επιστρέφει NULL στην τελευταία γραμμή του αρχείου που διαβάζει όταν είναι κενή (π.χ. ένα σκέτο '\n').
nik324 Δημοσ. 1 Νοεμβρίου 2012 Δημοσ. 1 Νοεμβρίου 2012 ΥΓ. Πρόσφατα σπατάλησα περίπου 4 ώρες..... Για αυτο ο προγραμματισμος ειναι ωραιος...Αλλα καμια φορα λογικο ειναι να υπαρχει μια μικρη απογοητευση
nik324 Δημοσ. 1 Νοεμβρίου 2012 Δημοσ. 1 Νοεμβρίου 2012 > typedef struct A{ int value1; int value2; }A; typedef struct B{ struct B *next; A *s; }B; A *ptr = calloc(1 , sizeof (A) ); B *new = calloc(1 , sizeof ( ); Πως θα περασω τιμες στα πεδια του Α;
Timonkaipumpa Δημοσ. 1 Νοεμβρίου 2012 Δημοσ. 1 Νοεμβρίου 2012 > prt->value1 = ... Αλλά κάτι μου λέει πως δεν είναι αυτό το πρόβλημα που έχεις.
nik324 Δημοσ. 1 Νοεμβρίου 2012 Δημοσ. 1 Νοεμβρίου 2012 > prt->value1 = ... Αλλά κάτι μου λέει πως δεν είναι αυτό το πρόβλημα που έχεις. Aκριβως, εκτος και αν ειναι πολυ πιο απλο απο οτι αρχικα το φανταστικα Aυτο που θελω βασικα ειναι καθως κανω προσπελαση στη λιστα (struct B ) να εχω προσβαση σε ενα stuct ( το Α στην συγκεκριμενη περιπτωση)
migf1 Δημοσ. 2 Νοεμβρίου 2012 Δημοσ. 2 Νοεμβρίου 2012 > B *pb = calloc(1, sizeof( ); if ( !pb ) exit(1); pb->next = NULL; pb->s = calloc(1, sizeof(A) ); if ( !(pb->s) ) { free(pb); exit(1); } pb->s->value1 = pb->s->value2 = 1; ...
nik324 Δημοσ. 3 Νοεμβρίου 2012 Δημοσ. 3 Νοεμβρίου 2012 (επεξεργασμένο) Απλη ερωτηση... Πως μπορω να εχω μια global τιμη στο προγραμμα μου και καθε που κανω εκχωριση της τιμης αυτης σε μια μεταβλητη να αυξανει κατα ενα; Αν κανω define αυτο a=0; και μεσα σε διαφορα σημεια εκχωρω το a+1, τοτε αυτη η τιμη που θα εκχωρηται θα ειναι παντα 1! Εγω θελω σε καθε εκχωρηση να αυξανει κατα ενα... Επεξ/σία 3 Νοεμβρίου 2012 από nik324
albNik Δημοσ. 3 Νοεμβρίου 2012 Δημοσ. 3 Νοεμβρίου 2012 Κάνε τη μεταβλητή static ώστε να μην φαίνεται απ' έξω και πάρε την τιμή της μόνο μέσω συνάρτησης. static int value=0; int GetValue(){ return value++;} int c=Getvalue(); Μπορείς και μέσα σε συναρτηση: int GetValue() { static int value=0; return value++; }
nik324 Δημοσ. 3 Νοεμβρίου 2012 Δημοσ. 3 Νοεμβρίου 2012 Αυτο που σκευτομουν να κανω ηταν να αλλαζω το define στο runtime..Aλλα μου κανει και αυτο..Ευχαριστω
albNik Δημοσ. 3 Νοεμβρίου 2012 Δημοσ. 3 Νοεμβρίου 2012 Το #define γίνεται evaluate από των προ-επεξεργαστή πριν το complile και δεν αλλάζει πια.
migf1 Δημοσ. 3 Νοεμβρίου 2012 Δημοσ. 3 Νοεμβρίου 2012 Εγώ δεν έχω καταλάβει την αρχική ερώτηση. Π.χ. τι πρόβλημα υπάρχει σε κάτι σαν το παρακάτω... > int g_int; // global var, initialized to 0 ... int test( int *n ) { *n = (g_int++) + 10; } Κι αν θες, αντί για συνάρτηση μπορείς να κάνεις macro (που είναι κι άχρηστο βασικά)... > #define INT_PLUS_PLUS( g ) ((g)++) ... int g_int; // global var, initialized to 0 ... int test( int *n ) { *n = INT_PLUS_PLUS(g_int) + 10; }
Προτεινόμενες αναρτήσεις