geostryia Δημοσ. 3 Αυγούστου 2005 Δημοσ. 3 Αυγούστου 2005 Εχουμε και λεμε σκοπος ειναι να φτιαχτει μια λιστα που καθε στοιχειο της να εχει ενα string για την αποθηκευση του ονοματος μιας μεταβλητης ,και ενα string για το περιεχομενο.Εχω φτιαξει την εξης δομη σε .h αρχειο: struct strtype { char *name; //onoma ths metablhths char *str_val;//periexomeno tis metablhths struct strtype *next; //diasyndetikos pointer listas }; Το προβλημα ειναι οτι θελω να αρχικοποιησω 2 δεικτες να κοιτανε στην αρχη της λιστας,και με τους 2 τροπους που προσπαθησα μου πεταει οτι : error C2099: initializer is not a constant (επισης και με δοκιμη να τα κανω constant τα ιδια πεταγε) Ο πρωτος ειναι με την δηλωση τους μετα την δηλωση της δομης. struct strtype *arxhPtr=(struct strtype *)malloc(sizeof(struct strtype)); struct strtype *trexonPtr=arxhPtr; και ο δευτερος ειναι με μια συναρτηση αρχικοποιησης : void initial(void){ static struct strtype *arxhPtr=(struct strtype *)malloc(sizeof(struct strtype)); static struct strtype *trexonPtr=arxhPtr; } Βοηθατε παιδια γιατι χανομαστε...
Papajohn Δημοσ. 3 Αυγούστου 2005 Δημοσ. 3 Αυγούστου 2005 Λοιπόν, κατ' αρχήν όπως ακριβώς γίνεις το προγραμμα σε μένα γίνεται compile μια χαρα. (DevC++) Συγκεκριμένα το: >#include <stdio.h> struct strtype { char name; //Εχω βγάλει τα * απλά για να δοκιμάσω με την printf παρακάτω char str_val;//και με τα * όμως λειτουργεί με ένα warning απο τον compiler. struct strtype *next; //diasyndetikos pointer listas }; int main(int argc, char *argv[]) { struct strtype *arxhPtr=(struct strtype *)malloc(sizeof(struct strtype)); struct strtype *trexonPtr=arxhPtr; trexonPtr->name='a'; trexonPtr->str_val='p'; printf("%c\n",trexonPtr->str_val); system("PAUSE"); return 0; } Αυτος ο κώδικας μου τυπώνει κανονικά ένα p. Βέβαια λες: Εχουμε και λεμε σκοπος ειναι να φτιαχτει μια λιστα που καθε στοιχειο της να εχει ενα string για την αποθηκευση του ονοματος μιας μεταβλητης ,και ενα string για το περιεχομενο. Με τον κώδικα: >struct strtype { char *name; //onoma ths metablhths char *str_val;//periexomeno tis metablhths struct strtype *next; //diasyndetikos pointer listas }; σχέτο όμως δεν βλέπω πως υλοποιείς τα strings. Έχεις απλά στο struct σου δύο δείχτες σε χαρακτήρες ποτ δείχνουν στο πουθενά. Για να υλοποιήσεις strings δεν πρέπει να αρχικοποιήσεις αυτους τους δείκτες σε μια περιοχή δεσμευμένης μνήμης με μια malloc;; Αυτο νομίζω είναι άσχετο όμως.
geostryia Δημοσ. 3 Αυγούστου 2005 Μέλος Δημοσ. 3 Αυγούστου 2005 Τις αρχικοποιησεις σε αυτα τα πεδια τις κανω δυναμικα με συναρτησεις. Το προβλημα ειναι οτι εγω δεν θελω να το βαλω στη main γιατι για την εφαρμογη που προοριζεται πρεπει να δινω εγω την αρχη της λιστας και το τρεχον στοιχειο της. Για να αλλαξω το ερωτημα γινεται μεσα σε ενα αρχειο .h να αρχικοποιησω μεταβλητες για αυτον που θα το κανει include ; Αλλιως πρεπει να αλλαξω ολες τις συναρτησεις και να το περνουν ως ορισμα αλλα δεν και τοσο ευκολο γιατι ειναι μπολικες.
godlike Δημοσ. 4 Αυγούστου 2005 Δημοσ. 4 Αυγούστου 2005 Τις αρχικοποιησεις σε αυτα τα πεδια τις κανω δυναμικα με συναρτησεις.Το προβλημα ειναι οτι εγω δεν θελω να το βαλω στη main γιατι για την εφαρμογη που προοριζεται πρεπει να δινω εγω την αρχη της λιστας και το τρεχον στοιχειο της. Για να αλλαξω το ερωτημα γινεται μεσα σε ενα αρχειο .h να αρχικοποιησω μεταβλητες για αυτον που θα το κανει include ; Αλλιως πρεπει να αλλαξω ολες τις συναρτησεις και να το περνουν ως ορισμα αλλα δεν και τοσο ευκολο γιατι ειναι μπολικες. Όπα όπα!!! Λες “Το προβλημα ειναι οτι εγω δεν θελω να το βαλω στη main” Αν κατάλαβα σωστά περιμένεις να εκτελεστούνε οι συναρτήσεις χωρίς να τις καλέσεις;;; Αυτό είναι αδύνατο. Πρέπει να τις βάλεις στην main, συνάρτηση που δεν υπάρχει στην main δεν υπάρχει για το πρόγραμμα! Αν κατάλαβα καλά πάντα.
geostryia Δημοσ. 4 Αυγούστου 2005 Μέλος Δημοσ. 4 Αυγούστου 2005 Oxi auto pou thelo einai na mhn ftiaxno thn arxh ths listas mesa sto program na thn exo sto .h kai apla na kalo thn synarthsh pou tis arxikopoiei . Alla apo oti blepo auto den ginetai opote kai tha strafo se allous tropous. Thanx gia thn bohtheia anyway.
krot Δημοσ. 7 Αυγούστου 2005 Δημοσ. 7 Αυγούστου 2005 αντι γι'αυτό: void initial(void){ static struct strtype *arxhPtr=(struct strtype *)malloc(sizeof(struct strtype)); static struct strtype *trexonPtr=arxhPtr; } δοκίμασε αυτό: void initial(void){ static struct strtype *arxhPtr; static struct strtype *trexonPtr; arxhPtr=(struct strtype *)malloc(sizeof(struct strtype)); trexonPtr=arxhPtr; }
Sta Δημοσ. 7 Αυγούστου 2005 Δημοσ. 7 Αυγούστου 2005 Καλησπέρα και από εμένα, Απαντώντας στην ερώτηση σου πρέπει να σου πω πως στο αρχείο .h μπορείς να δηλώσεις κανονικά τους δείκτες που αναφέρεις και να τους αρχικοποιήσεις μόνο σε σταθερές και όχι καλώντας κάποια συνάρτηση. Για το λόγο αυτό παίρνεις αυτό το λάθος. Η αρχικοποίηση σε τιμή επιστροφής κάποιας συνάρτησης μπορεί να γίνει μόνο μέσα σε κάποια άλλη συνάρτηση, όπως είναι και η main. Αφού όμως η αρχικοποίηση γίνεται μόνο μία φορά στην αρχή της εκτέλεσης και μάλιστα εδώ σε global μεταβλητές δε μπορώ να καταλάβω ποιό ακριβώς είναι το πρόβλημα. Αν μιλάμε βέβαια για ένα σχετικά μεγάλο project, καλό είναι στα αρχεία .h να έχουμε μεταβλητές δηλωμένες με τον προσδιοριστή extern ώστε να μπορούμε να τις προσπελάσουμε από διαφορετικά αρχεία.
geostryia Δημοσ. 8 Αυγούστου 2005 Μέλος Δημοσ. 8 Αυγούστου 2005 δοκίμασε αυτό:void initial(void){ static struct strtype *arxhPtr; static struct strtype *trexonPtr; arxhPtr=(struct strtype *)malloc(sizeof(struct strtype)); trexonPtr=arxhPtr; } To δοκιμασα αυτο εξ αρχης krot,αλλα δεν επαιζε ουτε και αυτο. Τhanx Sta το προβλημα ηταν το extern, οντως ειναι ψιλομεγαλο project ,οποτε τετοιες π.......ς γινονται.
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.