lolek Δημοσ. 3 Δεκεμβρίου 2010 Δημοσ. 3 Δεκεμβρίου 2010 Σε ενα προγραμμα C++ εχω ενα αρχειο με τις συναρτησεις μου και θελω να ορισω ενα πινακα string myStrings[N][N] στην αρχη του κώδικα ωστε να τον βλεπουν ολες.Το προβλημα ειναι οτι το Ν το παιρνω απο ενα αρχειο txt οποτε οταν παω να ορισω τον πινακα μαλλον επειδη δεν εχει διαβασει ακομα το N ή επειδη αυτο δεν ειναι σταθερο μου βγαζει σφαλμα.Αν βάλω string myStrings[5][5] πχ δεν βγαζει σφαλμα. Μπορει κάποιος να μου προτεινει μια λυση?
MitsakosGR Δημοσ. 3 Δεκεμβρίου 2010 Δημοσ. 3 Δεκεμβρίου 2010 Σε ενα προγραμμα C++ εχω ενα αρχειο με τις συναρτησεις μου και θελω να ορισω ενα πινακα string myStrings[N][N] στην αρχη του κώδικα ωστε να τον βλεπουν ολες.Το προβλημα ειναι οτι το Ν το παιρνω απο ενα αρχειο txt οποτε οταν παω να ορισω τον πινακα μαλλον επειδη δεν εχει διαβασει ακομα το N ή επειδη αυτο δεν ειναι σταθερο μου βγαζει σφαλμα.Αν βάλω string myStrings[5][5] πχ δεν βγαζει σφαλμα. Μπορει κάποιος να μου προτεινει μια λυση? Αυτό πρέπει να το κάνεις με δυναμικό πίνακα (pointer) ή με vectors. >string** myStrings; //Δημιουργία δισδιάστατου πίνακα (pointer σε pointer) myStrings = new string* [N];//Ορισμός της πρώτης διάστασης for(int i=0; i<N; ++i) myStrings[i] = new string [N];//Ορισμός δεύτερης διάστασης για κάθε στοιχείο του πίνακα.
Επισκέπτης Δημοσ. 3 Δεκεμβρίου 2010 Δημοσ. 3 Δεκεμβρίου 2010 Πρέπει να κάνεις δυναμική δέσμευση μνήμης με την malloc.Δηλαδή πρέπει να ψάξεις για pointers και πώς αυτοί σχετίζονται με arrays.Να ξέρεις πάντως ότι επειδή έχεις δισδιάστατο πίνακα θα χρησιμοποιήσεις δείκτη σε δείκτη. Edit:Συγγνώμη προφανώς στη c++ γίνετε και πιο εύκολα.
lolek Δημοσ. 3 Δεκεμβρίου 2010 Μέλος Δημοσ. 3 Δεκεμβρίου 2010 Ωραίος..Ευχαριστω.Αν θελω τωρα να αναφερθω στο 10 στοιχειο ενος 5*5 θα το κανω κανονικα myStrings[2][5] ?
MitsakosGR Δημοσ. 3 Δεκεμβρίου 2010 Δημοσ. 3 Δεκεμβρίου 2010 Ωραίος..Ευχαριστω.Αν θελω τωρα να αναφερθω στο 10 στοιχειο ενος 5*5 θα το κανω κανονικα myStrings[2][5] ? Μην ξεχνάς ότι η αρίθμηση ξεκινάει από το 0. Οπότε το myStrings[2][5] βγαίνει εκτός ορίων για πίνακα 5x5... myStrings[0][0] είναι το πρώτο στοιχείο και mystrings[4][4] είναι το τελευταίο. Οπότε το myStrings[1][4] δίνει αυτό που θέλεις.
Timonkaipumpa Δημοσ. 5 Δεκεμβρίου 2010 Δημοσ. 5 Δεκεμβρίου 2010 Πρέπει να κάνεις δυναμική δέσμευση μνήμης με την malloc.Δηλαδή πρέπει να ψάξεις για pointers και πώς αυτοί σχετίζονται με arrays.Να ξέρεις πάντως ότι επειδή έχεις δισδιάστατο πίνακα θα χρησιμοποιήσεις δείκτη σε δείκτη. Edit:Συγγνώμη προφανώς στη c++ γίνετε και πιο εύκολα. Όχι malloc.....!!!! Αυτά είναι C κατάλοιπα (να μην πω για calloc ) New και δόξα ο Δίας! Θα μπορούσα να προτείνω την χρήση της βιβλιοθήκης ATL και να έχεις ένα vector αντί για 2D matrix. Δηλαδή, σε έναν 5x5 πίνακα, όπου έχεις 25 στοιχεία, να έχεις έναν 1x25 πίνακα (που εάν δήλωνες εξαρχής int[5][5] αυτό θα είχες).
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.