Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

  • Moderators
Δημοσ.

Αν δουλεύει έτσι, 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, είναι απο συνήθεια και δεν προσφέρει κάτι εδώ.

Δημοσ.

Αρα οπου χρησιμοποιώ τον κωδικά μου Color τα αναθέτω σε δείκτη, το δίνω ως παράμετρο οπου χρειάζεται, και μετά κανω delete. Σωστά;

Εχω παρασυνιθίσει το garbage collection μου φαινεται :P

 

 

 

Γιατι δεν φτιαχνω αντικείμενα Color, απλά ζητάω ενα char* με τις τιμές που δινω για rgb.

Δεν χρειάζεται το static (εκτός αν το έχεις για να εξασφαλίσεις πως η συνάρτηση είναι τοπική στο συγκεκριμένο source-module... α-λα C δηλαδή).

 

Στην άλλη ερώτηση, δεν έχω δει τον υπόλοιπο κώδικα, αλλά μόνο από αυτή την συνάρτηση μπορώ με ασφάλεια να σου προτείνω την παρακάτω χρήση της...

 

>
char *color = get('0','4','200');
...
delete color;

Eπίσης, καλό είναι να προσθέσεις και error-checking σε περίπτωση που αποτύχει η new

Δημοσ.

Αν δουλεύει έτσι, ok.

 

Εγώ θα άφηνα την αρχικοποίηση/ δέσμευση μνήμης για το color (που θα το όριζα ως αντικείμενο της Color, με members τα blue, green, red) εξωτερικά και θα υλοποιούσα την get κάπως έτσι:

 

Ναι, απλά βγαινει ευθεία η γραμμή μονο, οπότε οντως κατι κανω λαθος στο checkValid οπως υπέθεσες.(οκ αυτό το διορθωσα)

Το θεμα ειναι οτι το bmp αρχείο θελει να του γραψω ενα char* με ολα τα pixel και με βολεψε να το κανω έτσι. Θα κοιταξω και τον τρόπο που προτείνεις παντως.

 

Eπίσης, καλό είναι να προσθέσεις και error-checking σε περίπτωση που αποτύχει η new

 

Thanks για το tip, δεν ηξερα οτι μπορει να αποτυχει η new.

Δημοσ.

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 (πολλά βρήκα δηλαδή, αλλά κι αυτό αρκεί νομίζω).

Δημοσ.

Λοιπον αλλαξα τελείως την 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
Δημοσ.

Αν δεν τα δημιουργείς με new λογικά δεν χρειάζονται delete. Θα έχουν τοπική εμβέλεια.

Πχ

>
void somefunction() {
Color colortmp;

}

 

Αλλιώς χρειάζεται delete:

>
void somefunction() {
Color *colortmp = new Color();
...

delete colortmp; 
}

Τουλάχιστον έτσι νομίζω. Έχω καιρό να τα κάνω σοβαρό revisit αυτά.

Δημοσ.

Ναι με new ειναι. Τα βαζω σαν private members στην Maze πχ wallColor κτλ και θα τα κανω delete ολα μαζι στον destructor της Maze.

 

Ευχαριστώ για την βοηθεια :)

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...