Moderators Praetorian Δημοσ. 27 Ιουνίου 2012 Moderators Δημοσ. 27 Ιουνίου 2012 Αν δουλεύει έτσι, ok. Εγώ θα άφηνα την αρχικοποίηση/ δέσμευση μνήμης για το color (που θα το όριζα ως αντικείμενο της Color, με members τα blue, green, red) εξωτερικά και θα υλοποιούσα την get κάπως έτσι: > static bool Color::get(char RED, char GREEN, char BLUE, Color* color) { bool retVal = false; color.blue = BLUE; color.green = GREEN; color.red = RED; return retVal; } Ή θα μπορούσε η get να μην είναι static, και να την εφάρμοζες πάνω σε αντικείμενα της class Color (οπότε δε θα χρειαζόσουν το τελευταίο όρισμα και θα έπαιζες με το this). Edit: lol. αγνόησε το όλο retVal, είναι απο συνήθεια και δεν προσφέρει κάτι εδώ.
migf1 Δημοσ. 27 Ιουνίου 2012 Δημοσ. 27 Ιουνίου 2012 Αρα οπου χρησιμοποιώ τον κωδικά μου Color τα αναθέτω σε δείκτη, το δίνω ως παράμετρο οπου χρειάζεται, και μετά κανω delete. Σωστά; Εχω παρασυνιθίσει το garbage collection μου φαινεται Γιατι δεν φτιαχνω αντικείμενα Color, απλά ζητάω ενα char* με τις τιμές που δινω για rgb. Δεν χρειάζεται το static (εκτός αν το έχεις για να εξασφαλίσεις πως η συνάρτηση είναι τοπική στο συγκεκριμένο source-module... α-λα C δηλαδή). Στην άλλη ερώτηση, δεν έχω δει τον υπόλοιπο κώδικα, αλλά μόνο από αυτή την συνάρτηση μπορώ με ασφάλεια να σου προτείνω την παρακάτω χρήση της... > char *color = get('0','4','200'); ... delete color; Eπίσης, καλό είναι να προσθέσεις και error-checking σε περίπτωση που αποτύχει η new
bnvdarklord Δημοσ. 27 Ιουνίου 2012 Μέλος Δημοσ. 27 Ιουνίου 2012 Αν δουλεύει έτσι, ok. Εγώ θα άφηνα την αρχικοποίηση/ δέσμευση μνήμης για το color (που θα το όριζα ως αντικείμενο της Color, με members τα blue, green, red) εξωτερικά και θα υλοποιούσα την get κάπως έτσι: Ναι, απλά βγαινει ευθεία η γραμμή μονο, οπότε οντως κατι κανω λαθος στο checkValid οπως υπέθεσες.(οκ αυτό το διορθωσα) Το θεμα ειναι οτι το bmp αρχείο θελει να του γραψω ενα char* με ολα τα pixel και με βολεψε να το κανω έτσι. Θα κοιταξω και τον τρόπο που προτείνεις παντως. Eπίσης, καλό είναι να προσθέσεις και error-checking σε περίπτωση που αποτύχει η new Thanks για το tip, δεν ηξερα οτι μπορει να αποτυχει η new.
migf1 Δημοσ. 27 Ιουνίου 2012 Δημοσ. 27 Ιουνίου 2012 Thanks για το tip, δεν ηξερα οτι μπορει να αποτυχει η new. Δεν τα θυμάμαι πολύ καλά τα της C++, αλλά νομίζω πως από default πετάει ένα exception όταν αποτύχει. Αν θέλουμε να μην το πετάει αλλά να επιστρέφει NULL, πρέπει να την καλέσουμε με nothrow. Επειδή όμως δεν θυμάμαι την ακριβή σύνταξη, ρίξε του ένα γκουγκλάρισμα. EDIT: Να, βρήκα ένα σχετικό link: http://stackoverflow.com/questions/239302/is-it-useful-to-test-the-return-of-new-in-c (πολλά βρήκα δηλαδή, αλλά κι αυτό αρκεί νομίζω).
bnvdarklord Δημοσ. 27 Ιουνίου 2012 Μέλος Δημοσ. 27 Ιουνίου 2012 Λοιπον αλλαξα τελείως την Color, μου φάνηκε πιο σωστό από αυτό που ειχα. > class Color { public: char blue; char green; char red; Color(char RED, char GREEN, char BLUE) { set(RED, GREEN, BLUE); } Color() { setBlack(); } void set(char RED, char GREEN, char BLUE) { blue = BLUE; green = GREEN; red = RED; } void setBlack() { set(0xff, 0xff, 0xff); } //... more preset colors. Εδώ χρειάζονται πάλι delete τα αντικείμενα Color;
Moderators Praetorian Δημοσ. 27 Ιουνίου 2012 Moderators Δημοσ. 27 Ιουνίου 2012 Αν δεν τα δημιουργείς με new λογικά δεν χρειάζονται delete. Θα έχουν τοπική εμβέλεια. Πχ > void somefunction() { Color colortmp; } Αλλιώς χρειάζεται delete: > void somefunction() { Color *colortmp = new Color(); ... delete colortmp; } Τουλάχιστον έτσι νομίζω. Έχω καιρό να τα κάνω σοβαρό revisit αυτά.
bnvdarklord Δημοσ. 27 Ιουνίου 2012 Μέλος Δημοσ. 27 Ιουνίου 2012 Ναι με new ειναι. Τα βαζω σαν private members στην Maze πχ wallColor κτλ και θα τα κανω delete ολα μαζι στον destructor της Maze. Ευχαριστώ για την βοηθεια
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα