Προγραμματισμός Υπολογιστών με C++
-
- bit level
- Posts: 21
- Joined: Tue Oct 06, 2009 12:36 am
- Gender: ♀
Re: Προγραμματισμός Υπολογιστών με C++
Και κάτι άλλο στην getPixel() όταν κάνω
math::Vec3<float> v;
v[Image::RED] = buffer[s + RED];
μου πετάει error Error "cannot convert from 'math::Vec3<float>' to 'float"
αφού και τα δύο Vec3<float> τύπου είναι δεν καταλαβαίνω γιατί!
math::Vec3<float> v;
v[Image::RED] = buffer[s + RED];
μου πετάει error Error "cannot convert from 'math::Vec3<float>' to 'float"
αφού και τα δύο Vec3<float> τύπου είναι δεν καταλαβαίνω γιατί!
- Georgilakis Antonios
- Mbyte level
- Posts: 548
- Joined: Mon Dec 02, 2013 11:10 pm
- Academic status: Alumnus/a
- Gender: ♂
- Location: Straight into your Mind
Re: Προγραμματισμός Υπολογιστών με C++
Το v με index είναι float μέσα στο Vec3<float> (λογικά).AkisMadrugada wrote:Και κάτι άλλο στην getPixel() όταν κάνω
math::Vec3<float> v;
v[Image::RED] = buffer[s + RED];
μου πετάει error Error "cannot convert from 'math::Vec3<float>' to 'float"
αφού και τα δύο Vec3<float> τύπου είναι δεν καταλαβαίνω γιατί!
Μήπως το buffer το έχεις δηλώσει έτσι ? :
Code: Select all
Vec3<float> buffer[/* N */];
EDIT:
Ένα τελευταίο συμπέρασμα που βγάζω από το παραπάνω:
Code: Select all
// Vec3<float> & v = buffer[i];
float r = buffer[i][Image::RED];
float g = buffer[i][Image::GREEN];
float b = buffer[i][Image::BLUE];
Last edited by Georgilakis Antonios on Wed Dec 21, 2016 3:05 pm, edited 3 times in total.
"Always keep a low profile. Cause when you get high, things can become strange."
"Never stop doing things you like. Never stop loving people you love. Never give up. Believe in yourself. Believe in your hidden powers."
"Honesty is an expensive gift, so don't expect it from cheap people."
The Scientist
-
- bit level
- Posts: 21
- Joined: Tue Oct 06, 2009 12:36 am
- Gender: ♀
Re: Προγραμματισμός Υπολογιστών με C++
Vec3<float> *buffer;
Ναι έτσι το έχω δηλώσει
Edit::
Έχεις δίκιο στο edit σου, κατά συνέπεια εάν
δηλώσω τον buffer float δεν πετάει error!
Ναι έτσι το έχω δηλώσει
Edit::
Έχεις δίκιο στο edit σου, κατά συνέπεια εάν
δηλώσω τον buffer float δεν πετάει error!
Last edited by AkisMadrugada on Wed Dec 21, 2016 2:05 pm, edited 1 time in total.
- Georgilakis Antonios
- Mbyte level
- Posts: 548
- Joined: Mon Dec 02, 2013 11:10 pm
- Academic status: Alumnus/a
- Gender: ♂
- Location: Straight into your Mind
Re: Προγραμματισμός Υπολογιστών με C++
Ίσως (λέω ίσως) να μην είναι αυτό που χρειάζεσαι. (Η δήλωση τουλάχιστον, ή η μορφή της [μάλλον])AkisMadrugada wrote:Vec3<float> *buffer;
Ναι έτσι το έχω δηλώσει
EDIT: Μπορεί και να είναι όμως. (not sure)
"Always keep a low profile. Cause when you get high, things can become strange."
"Never stop doing things you like. Never stop loving people you love. Never give up. Believe in yourself. Believe in your hidden powers."
"Honesty is an expensive gift, so don't expect it from cheap people."
The Scientist
- nachos
- Gbyte level
- Posts: 1252
- Joined: Mon Aug 21, 2006 4:28 pm
- Academic status: Alumnus/a
- Gender: ♂
- Location: Brachamee City
Re: Προγραμματισμός Υπολογιστών με C++
Δεν υπάρχει λόγος το Vec3 να το δηλώσεις ως pointer. Για την ακρίβεια για αυτό που πας να κάνεις είναι λάθος και μάλιστα για πολλούς διαφορετικούς λόγους:
- - Η δήλωση ενός pointer δε συνεπάγεται και δημιουργία αντικειμένου. Θα πρέπει να κατασκευάσεις και το αντικείμενο με χρήση της new, το ποίο αυτόματα συνεπάγεται ότι κάποια στιγμή έχεις και την ευθύνη να το κάνεις delete. Αμφιβάλλω αν χρειάζεσαι κάτι τέτοιο στο context που δουλεύεις.
- O indexer ([ ]) πάνω σε ένα δείκτη εφαρμόζεται στον δείκτη, και όχι στο αντικείμενο που δείχνει αυτός. Έτσι, όταν λες buffer[ i ], όπου buffer ένα Vec3*, αυτό ερμηνεύεται ώς το Vec3 αντικείμενο που βρίσκεται i θέσεις έπειτα από τη διεύθυνση που δείχνει ο buffer (ωσαν ο buffer να ήταν πίνακας από Vec3 δλδ.). Αν θες μέσω του buffer να καλέσεις τον indexer του αντικειμένου Vec3 στο οποίο δείχνει, έχεις τις εξής 2 επιλογές:- 1. Dereference τον δείκτη και εφαρμογή του indexer στο παραγόμενο: 2. Κλήση του operator με το πλήρες όνομα του, μέσω του δείκτη:
Code: Select all
(*buffer)[i]
Code: Select all
buffer->operator[](i)
- 1. Dereference τον δείκτη και εφαρμογή του indexer στο παραγόμενο:
Code: Select all
Vec3 buffer;
Nothing is impossible for the man who doesn't have to do it himself
- skater1995
- bit level
- Posts: 44
- Joined: Tue Jan 21, 2014 5:14 pm
- Academic status: Alumnus/a
- Gender: ♂
Re: Προγραμματισμός Υπολογιστών με C++
Υπάρχει δυνατότητα να στείλω μαζί με την δεύτερη εργασία και την πρώτη? Ή αυτό γίνεται μόνο με την τρίτη και τελευταία εργασία?
Re: Προγραμματισμός Υπολογιστών με C++
Μπορείς να στείλεις και τις 2 μαζί.skater1995 wrote:Υπάρχει δυνατότητα να στείλω μαζί με την δεύτερη εργασία και την πρώτη? Ή αυτό γίνεται μόνο με την τρίτη και τελευταία εργασία?
Coders Cycle
-> -> -> ->
-> -> -> ->
- skater1995
- bit level
- Posts: 44
- Joined: Tue Jan 21, 2014 5:14 pm
- Academic status: Alumnus/a
- Gender: ♂
Re: Προγραμματισμός Υπολογιστών με C++
Καλησπέρα παιδιά, έχω την εξής απορία και θα ήμουν ευγνώμων αν μπορούσε κάποιος να με βοηθήσει.(Πρώτη εργασία κατά το διάβασμα των δεδομένων της εικόνας). Έχω φτιάξει μια μεταβλητή( int character ) στην οποία διαβάζω ένα ένα τα bytes με σωστό τρόπο(επαληθευμένα). Εν συνεχεία έχω μια μεταβλητή pointer ( float * buffer = new float ) στην οποία θέλω να αποθηκεύσω τα δεδομένα αυτά. Εκτελώ μέσα σε ένα loop την εξής εντολή για κάθε καινούργιο byte που είναι αποθηκευμένο στο character : ( buffer = (float)character; ) που είμαι αρκετά σίγουρος ότι είναι λάθος.Όταν εκτελώ το πρόγραμμα μου πετάει : Access violation reading location 0xFFFFF..... .Ψάχνω στο βιβλίο να βρω τι πάει λάθος αλλά πιστεύω ότι κάποιος που γνωρίζει C++ θα μπορεί αμέσως να καταλάβει τι πάει λάθος και να μου σώσει πολύ χρόνο.
Coders Cycle
-> -> -> ->
-> -> -> ->
- leecher
- Venus Former Team Member
- Posts: 139
- Joined: Fri Jan 23, 2015 9:47 pm
- Academic status: N>4
- Gender: ♂
Re: Προγραμματισμός Υπολογιστών με C++
Το i παίρνει σίγουρα τιμές από το 0 ως και το n-1 όπου n το μέγεθος του buffer? Γιατί το error αυτό ίσως στο πετάει γιατί πας να διαβάσεις από θέση που δεν ανήκει στον πίνακα.
Re: Προγραμματισμός Υπολογιστών με C++
δεν εχω ορίσει κάπου το μέγεθος του buffer όμως.. έχω γράψει ακριβώς αυτό :leecher wrote:Το i παίρνει σίγουρα τιμές από το 0 ως και το n-1 όπου n το μέγεθος του buffer? Γιατί το error αυτό ίσως στο πετάει γιατί πας να διαβάσεις από θέση που δεν ανήκει στον πίνακα.
component_t * buffer = new component_t;
Όπου component_t έχουμε ήδη ορίσει ότι είναι το ιδιο με το float
Last edited by v4ss4s1n on Wed Dec 21, 2016 8:54 pm, edited 1 time in total.
Coders Cycle
-> -> -> ->
-> -> -> ->
- Georgilakis Antonios
- Mbyte level
- Posts: 548
- Joined: Mon Dec 02, 2013 11:10 pm
- Academic status: Alumnus/a
- Gender: ♂
- Location: Straight into your Mind
Re: Προγραμματισμός Υπολογιστών με C++
v4ss4s1n wrote:δεν εχω ορίσει κάπου το μέγεθος του buffer όμως.. έχω γράψει ακριβώς αυτό :leecher wrote:Το i παίρνει σίγουρα τιμές από το 0 ως και το n-1 όπου n το μέγεθος του buffer? Γιατί το error αυτό ίσως στο πετάει γιατί πας να διαβάσεις από θέση που δεν ανήκει στον πίνακα.
component_t * buffer = new component_t;
Code: Select all
#include <cstddef> // 'NULL' symbol.
// ...
component_t *buffer = new component_t[szBufferSize];
for (size_t i = 0; i < szBufferSize; i++)
{
// ...
}
// ...
delete[ ] buffer;
buffer = NULL;
// ...
EDIT: Εναλλακτικά (Έχω δει να πιάνει και για μεγάλα buffers, ενώ το new όχι):
Code: Select all
#include <cstddef> // 'NULL' symbol.
#include <cstdlib> // 'malloc()', 'free()'
// ...
component_t *buffer = reinterpret_cast<component_t *>(malloc(szBufferSize * sizeof(component_t)));
if (buffer)
{
for (size_t i = 0; i < szBufferSize; i++)
{
// ...
}
// ...
free(buffer);
buffer = NULL;
}
else
{
// Handle memory allocation error ... (rare)
}
// ...
Last edited by Georgilakis Antonios on Wed Dec 21, 2016 9:14 pm, edited 5 times in total.
"Always keep a low profile. Cause when you get high, things can become strange."
"Never stop doing things you like. Never stop loving people you love. Never give up. Believe in yourself. Believe in your hidden powers."
"Honesty is an expensive gift, so don't expect it from cheap people."
The Scientist
Re: Προγραμματισμός Υπολογιστών με C++
Παιδιά ευχαριστώ πάρα πολύ...αλήθεια..Georgilakis Antonios wrote:leecher wrote:Το i παίρνει σίγουρα τιμές από το 0 ως και το n-1 όπου n το μέγεθος του buffer? Γιατί το error αυτό ίσως στο πετάει γιατί πας να διαβάσεις από θέση που δεν ανήκει στον πίνακα.
Φτιάξε το κατάλληλα.Code: Select all
#include <cstddef> // 'NULL' symbol. // ... component_t *buffer = new component_t[szBufferSize]; for (size_t i = 0; i < szBufferSize; i++) { // ... } // ... delete[ ] buffer; buffer = NULL; // ...
Coders Cycle
-> -> -> ->
-> -> -> ->
Re: Προγραμματισμός Υπολογιστών με C++
Γειά σας παιδιά και πάλι..Έχω ένα πρόβλημα και θα ήθελα λίγο βοήθεια αν γνωρίζει κανείς τι πάει λάθος..
Το πρόβλημα:
Έχω έναν pointer σε ένα αντικείμενο τύπου Image.( Image * myimage = new Image; )
Η κλάση Image έχει μέσα 2 μεταβλητές int a,b και 1 μεταβλητή float * buffer;
Προσπαθώ στη συνέχεια να πάρω τις τιμές a, b μέσω μίας συνάρτησης της κλάσης Image : (getA(){return a;},
getB(){return b;})
Αυτό το κάνω έτσι : (*myimage).getA() και (*myImage).getB() Ή myimage->getA() και myimage->getB() .
Το πρόβλημα όμως είναι πως όταν καλώ την μέθοδο (*myimage).getA() και στη συνέχεια καλώ την μέθοδο (*myimage).getB() επιστρέφει σωστά το a όμως μετά για κάποιο λόγω ο pointer myimage χάνει την τιμή του και όταν καλείται η (*myimage).getB() μου επιστρέφει ό,τι νά'ναι..Το ίδιο αποτέλεσμα έχει και ο δεύτερος τρόπος..δεν μπορώ να καταλάβω τι συμβαίνει λάθος..
προσπάθησα μέχρι και να κάνω const τον pointer myimage αλλά πάλι τα ίδια..
Το πρόβλημα:
Έχω έναν pointer σε ένα αντικείμενο τύπου Image.( Image * myimage = new Image; )
Η κλάση Image έχει μέσα 2 μεταβλητές int a,b και 1 μεταβλητή float * buffer;
Προσπαθώ στη συνέχεια να πάρω τις τιμές a, b μέσω μίας συνάρτησης της κλάσης Image : (getA(){return a;},
getB(){return b;})
Αυτό το κάνω έτσι : (*myimage).getA() και (*myImage).getB() Ή myimage->getA() και myimage->getB() .
Το πρόβλημα όμως είναι πως όταν καλώ την μέθοδο (*myimage).getA() και στη συνέχεια καλώ την μέθοδο (*myimage).getB() επιστρέφει σωστά το a όμως μετά για κάποιο λόγω ο pointer myimage χάνει την τιμή του και όταν καλείται η (*myimage).getB() μου επιστρέφει ό,τι νά'ναι..Το ίδιο αποτέλεσμα έχει και ο δεύτερος τρόπος..δεν μπορώ να καταλάβω τι συμβαίνει λάθος..
προσπάθησα μέχρι και να κάνω const τον pointer myimage αλλά πάλι τα ίδια..
Coders Cycle
-> -> -> ->
-> -> -> ->
Re: Προγραμματισμός Υπολογιστών με C++
Τι εννοείς χάνει την τιμή του; Εκτύπωσες την τιμή του myimage πριν και μετά τις κλήσεις και είχε αλλάξει; Τι ακριβώς σου επιστρέφει η getB();;
Re: Προγραμματισμός Υπολογιστών με C++
kras wrote:Τι εννοείς χάνει την τιμή του; Εκτύπωσες την τιμή του myimage πριν και μετά τις κλήσεις και είχε αλλάξει; Τι ακριβώς σου επιστρέφει η getB();;
θεωρητικά το a και το b θα έπρεπε να έχουν τις τιμές 1200 και 750 (και τις έχουν μέχρι να καλέσω την getA ή την getB,ή προσπελάσω τον pointer με οποιονδήποτε τρόπο). Οι getA και getB απλά επιστρέφουν τις αντίστοιχες μεταβλητές(το a και το b).Όταν καλέσω είτε την getA είτε την getB, τότε ο pointer myimage σταματάει να δείχνει εκεί που έδειχνε και οι τιμές a και b γίνονται ό,τι νά'ναι..και είναι διαφορετικές σε κάθε υπολογιστή..
Σημείωση: ξέρω τι τιμές έχουν επειδή τις βλέπω μέσω του visual studio σε debug mode.
Coders Cycle
-> -> -> ->
-> -> -> ->
- leecher
- Venus Former Team Member
- Posts: 139
- Joined: Fri Jan 23, 2015 9:47 pm
- Academic status: N>4
- Gender: ♂
Re: Προγραμματισμός Υπολογιστών με C++
Στείλε τον κώδικα.
Re: Προγραμματισμός Υπολογιστών με C++
Που? :Pleecher wrote:Στείλε τον κώδικα.
Coders Cycle
-> -> -> ->
-> -> -> ->
- Georgilakis Antonios
- Mbyte level
- Posts: 548
- Joined: Mon Dec 02, 2013 11:10 pm
- Academic status: Alumnus/a
- Gender: ♂
- Location: Straight into your Mind
Re: Προγραμματισμός Υπολογιστών με C++
Άσε ένα μικρό αλλά επαρκές code snippet εδώ.
"Always keep a low profile. Cause when you get high, things can become strange."
"Never stop doing things you like. Never stop loving people you love. Never give up. Believe in yourself. Believe in your hidden powers."
"Honesty is an expensive gift, so don't expect it from cheap people."
The Scientist
Re: Προγραμματισμός Υπολογιστών με C++
Καλησπέρα παιδιά, απλά θέλω να κάνω report τι έφταιγε..Νόμιζα ότι εμείς δεν έπρεπε να έχουμε ένα αντικείμενο τύπου Image στην main, αλλά έπρεπε να έχουμε ένα reference σε ένα τέτοιο object.Επομένως, (Δεν είμαι σίγουρος για το παρακάτω, ούτε ξέρω το γιατί, απλά το υποθέτω) κατέστρεφε το αντικείμενο και το reference έδειχνε σε μια τυχαία θέση μνήμης .Ευχαριστώ πολύ τους : leecher και Georgilakis Antonios για την βοήθειά τους.
Coders Cycle
-> -> -> ->
-> -> -> ->
Re: Προγραμματισμός Υπολογιστών με C++
η παραδωση εργασιων δεν μπορει να γινει αλλη περιοδο?