bnvdarklord Δημοσ. 10 Ιουλίου 2014 Δημοσ. 10 Ιουλίου 2014 Το ξέρω ότι δεν δινω context, αλλά είναι τόσο κουλό το πρόβλημα που ίσως να μπορείτε τουλάχιστον να με κατευθύνετε. Στο πρόγραμμα μου μέσα σε κάποια επανάληψη θέλω να τυπώσω δύο αντικείμενα. Γράφω λοιπόν αυτό cout << oldLabel.printLabel() << " vs " << newLabel.printLabel() << endl; (τα printLabel επιστρέφουν std::string και ειναι const) Χωρίς το παραπάνω το πρόβλημα δουλεύει και τερματίζει. Με το παραπάνω το πρόγραμμα κρασάρει(αλλού) και μαλιστα μεχρι να κρασάρει βγάζει διαφορετικά αποτελέσματα από οτι χωρίς το cout. Το τελείως κουλό ειναι οτι αν αντι για την παραπάνω εντολή γραψω: cout << oldLabel.printLabel(); cout << " vs " << newLabel.printLabel() << endl; Τότε τυπωνει αυτα που θελω και τερματίζει οπως πριν. Πώς διάλο γίνεται αυτό;
migf1 Δημοσ. 10 Ιουλίου 2014 Δημοσ. 10 Ιουλίου 2014 Δοκίμασε να αφαιρέσεις το const... μετά λογικά θα σου δουλεύει και ως one-liner.
bnvdarklord Δημοσ. 10 Ιουλίου 2014 Μέλος Δημοσ. 10 Ιουλίου 2014 Δεν άλλαξε κάτι... Δεν εχω ξανασυνατήσει κατι τετοιο. Υπαρχει αραγε καποια λογικη;
migf1 Δημοσ. 10 Ιουλίου 2014 Δημοσ. 10 Ιουλίου 2014 Έλεγα μήπως έχει να κάνει με τον τρόπο που κάνει chain το cout stream, αλλά αν πάλι χτυπάει τότε προφανώς έκανα λάθος. Σίγουρα είναι όμως εκεί το πρόβλημά σου; Μήπως σου έχει χτυπήσει κάτι άλλο νωρίτερα κι απλώς αργεί να στο εκδηλώσει;
defacer Δημοσ. 10 Ιουλίου 2014 Δημοσ. 10 Ιουλίου 2014 Δε νομίζω να υπάρχει περίπτωση να κάνεις overload τον operator << ... υπάρχει; 1
Papakaliati Δημοσ. 10 Ιουλίου 2014 Δημοσ. 10 Ιουλίου 2014 Ξανακοιτα τον κωδικα σου. Δεν υπαρχει περιπτωση να ειναι προβλημα της cout, κατι λαθος στον κωδικα θα κανεις.
παπι Δημοσ. 11 Ιουλίου 2014 Δημοσ. 11 Ιουλίου 2014 Η μονη διαφορα στο πρωτο με το δευτερο, ειναι οι στο πρωτο καλεις πρωτα την newLabel και μετα την oldLabel, ενω στο δευτερο ειναι κανονικα (πρωτα το oldLabel και μετα το newLabel)
bnvdarklord Δημοσ. 11 Ιουλίου 2014 Μέλος Δημοσ. 11 Ιουλίου 2014 (επεξεργασμένο) @defacer - όχι, υποθετω αν ηταν τετοιας φύσης το πρόβλημα θα ειχα θέμα και στα 2 couts @Papakaliati - ναι προφανως, το ερώτημα ειναι πού και τι. @παπι - αλλάζοντας την σειρα στο 1 cout δεν αλλαξε κατι. Επίσης, τρέχοντας σαν minimal στην main το παρακάτω, τρέχει κανονικά. int main(int argc, char* argv[]) { Label<int> L(...); Label<int> Q(...); cout << L.printLabel() << " vs " << Q.printLabel() << endl; return 0; } Επίσης αν σε προηγούμενο βήμα του αλγορίθμου προσπαθήσω να τυπώσω με το 1 cout δύο άλλα labels τυπώνονται πάλι σωστά. Η λογική σκέψη θα ηταν ότι τα newLabel και oldLabel έχουν καποιο πρόβλημα, αλλα με τα χωριστά cout τυπώνοντια κανονικά. Δεν ξέρω αν έχει σημασία, αλλα η printLabel είναι αυτή: //nodeID -> int //arrivalTime -> int //size -> int //criteria[i] -> T* template <typename T> string Label<T>::printLabel() const { stringstream stream; stream << "(N:" << nodeID << ", C:{"; for (int i = 0; i < size; i++) { stream << criteria[i]; if(i < size - 1) stream << ","; } stream << "}, A:" << arrivalTime << ")"; return stream.str(); } edit: Και για να γίνει ακόμα πιο περίεργο το πρόβλημα δεν υπάρχει στο g++, αλλά μόνο στο vs2010 που το ετρεχα αρχικά. Και πέρα από αυτό το προγραμμα βγάζει άλλα αποτελέσματα(=βρισκει διαφορετικές λυσεις) όταν τρέχει με vs2010 και άλλα με g++. wtf Επεξ/σία 12 Ιουλίου 2014 από bnvdarklord
bnvdarklord Δημοσ. 12 Ιουλίου 2014 Μέλος Δημοσ. 12 Ιουλίου 2014 Λοιπον δεν ξερω γιατι δεν εδωσα σημασία νωρίτερα, αλλα όταν δίνω το cout της μιας γραμμής το πρόγραμμα κρασάρει χωρις να φτάσει ποτε στην εντολή αυτή, εβαλα breakpoint και δεν έγινε ποτέ. Λογική = 0
Timonkaipumpa Δημοσ. 12 Ιουλίου 2014 Δημοσ. 12 Ιουλίου 2014 Είναι για desktop και όχι για κάποια προσομοίωση άλλου συστήματος;
bnvdarklord Δημοσ. 12 Ιουλίου 2014 Μέλος Δημοσ. 12 Ιουλίου 2014 Ναι ναι, για desktop. Μπορει να το προκαλεί καποιο memory leak; Έτρεξα το dr memory(δεν εχω χρησιμοποιησει ξανα κατι τετοιο) σε εκτελέσιμο χωρις την προβληματική εντολή ωστε να τερματίσει κανονικά, και βγάζει καποια errors αλλά δεν τα πολυκαταλαβαίνω. Δεν ξερω αν μπορείτε να βγάλετε άκρη χωρις κώδικα για το ειδος του καθε προβλήματος, αλλα τα παραθέτω results.txt
Timonkaipumpa Δημοσ. 12 Ιουλίου 2014 Δημοσ. 12 Ιουλίου 2014 Εάν δεν είναι ευαίσθητα δεδομένα, τότε νομίζω ότι θα είναι καλύτερα να ανεβάσεις ολόκληρο τον κώδικα από την κλάση plus κώδικα που να δημιουργεί πρόβλημα και να είναι ολόκληρος.
bnvdarklord Δημοσ. 12 Ιουλίου 2014 Μέλος Δημοσ. 12 Ιουλίου 2014 Επειδη ειναι πτυχιακή θα προτιμούσα να μην το ανεβάσω εδω... Αλλά αν θέλει κάποιος να του ριξει μια ματιά σε pm δεν έχω πρόβλημα.
Timonkaipumpa Δημοσ. 12 Ιουλίου 2014 Δημοσ. 12 Ιουλίου 2014 Κόψε την κλάση, άλλαξε ονόματα και ανέβασέ τον. Δεν νομίζω να έχεις κάποιο πρόβλημα.
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα