Apanepai Δημοσ. 8 Φεβρουαρίου 2008 Δημοσ. 8 Φεβρουαρίου 2008 Καλησπέρα παιδιά. Έχω 3 κλάσεις οι οποίες δεν συνδεόνται κληρονομηκά μεταξύ τους και θέλω να γράψω σε ένα αρχείο στοιχεία και από τις 3. Έχω υλοποιήσει σε κάθε κλάση από τις 3 μία συνάρτηση writetofile() με τον εξής κώδικα: >writetofile() { ofstream fout("trexousa_katastasi.txt"); if (fout == 0) { cout << "Error: could not open file output.txt" << endl; } fout<<1<<endl; fout.close(); } Έπειτα στην κυρίως κλάση που τρέχει το πρόγραμμα έχω υλοποιήση το συνολικό write ως εξής: >writetofile() { long pos; ofstream ft("trexousa_katastasi.txt"); if (ft == 0) { cout << "Error: could not open file output.txt" << endl; } trm.writetofile(); pos=ft.tellp(); ft.seekp(pos); shm.writetofile(); pos=ft.tellp(); ft.seekp(pos); plm.writetofile(); ft.close(); } όπου trm, shm και plm είναι αντικείμενο των 3 κλάσεων που αναφέρθηκαν παραπάνω. Το πρόβλημα είναι το πρόγραμμα κολλάει και βγάζει error όταν το τρέχω τη στιγμή που καλείτε η παραπάνω συνάρτηση. Όταν καλέσω τις συναρτήσεις των 3 κλάσεων ξεχωριστά δουλεύουν μια χαρά αλλά όταν καλέσω τη συνολική υπάρχει πρόβλημα. Καμία ιδέα για το τι μπορεί να φταίει?
Apanepai Δημοσ. 8 Φεβρουαρίου 2008 Μέλος Δημοσ. 8 Φεβρουαρίου 2008 Νομίζω πως κατάλαβα που είναι το λάθος. Στο άνοιγμα και στο κλείσιμο των stream σε κάθε κλάση. Το σκέφτηκα λοιπόν τώρα ως εξής. Να δημιουργήσω ένα ofstream στην κυρίως κλάση το οποίο θα δέχονται σαν όρισμα οι άλλες 3 συναρτήσεις εκτύπωσης. Δηλαδή ο κώδικας θα είανι ως εξής: >writetofile() { long pos; ofstream fout("trexousa_katastasi.txt"); if (fout == 0) { cout << "Error: could not open file output.txt" << endl; } trm.writetofile(fout); pos=fout.tellp(); fout.seekp(pos); shm.writetofile(fout); pos=fout.tellp(); fout.seekp(pos); plm.writetofile(fout); fout.close(); } Και σε κάθε μία από τις 3 κλάσεις ως εξής: >writetofile(ofstream fout) { fout<<"test"<<endl; Το πρόβλημα είναι ότι χτυπάει ο compiler 738 >C:\Dev-Cpp\include\c++\3.4.2\bits\ios_base.h `std::ios_base::ios_base(const std::ios_base&)' is private Ποια είναι όμως η συνάρτηση που επιστρέφει reference στο ofstream? Εαν υπάρχει φυσικά διαφορετική προσέγγιση ειμαι όλος αυτιά.
Apanepai Δημοσ. 8 Φεβρουαρίου 2008 Μέλος Δημοσ. 8 Φεβρουαρίου 2008 Ας το θέσω αλλιώς μπας και μπορεί να βοηθήσει κανείς. Πως γίνετε να δημιουργήσω ένα txt αρχείο στο οποίο να γράφω συμπληρωματικά σε 3 σταδια. Δηλαδή να γίνεται η δημιουργία του αρχείου έπειτα να γράφω σε αυτό να κλείνω το stream και έπειτα να συνεχίζω να γράφω χωρίς να σβίνονται τα παλιά δεδομένα δηλαδή να συμπληρώνω στο αρχείο.
aeikinitos Δημοσ. 8 Φεβρουαρίου 2008 Δημοσ. 8 Φεβρουαρίου 2008 Μια απλή ιδέα που μου ήρθε στο μυαλό χωρίς πολύ σκέψη( ), δοκίμασε να δίνεις το ft σαν παράμετρο στην writetofile και φύγε το ofstream fout("trexousa_katastasi.txt");
Apanepai Δημοσ. 8 Φεβρουαρίου 2008 Μέλος Δημοσ. 8 Φεβρουαρίου 2008 Μια απλή ιδέα που μου ήρθε στο μυαλό χωρίς πολύ σκέψη( ), δοκίμασε να δίνεις το ft σαν παράμετρο στην writetofile και φύγε τοofstream fout("trexousa_katastasi.txt"); Αν κοιτάξεις το δεύτερο post θα δεις ότι και εγώ αυτό σκέφτηκα αλλά το πρόβλημα είναι ότι είναι private και δεν μπορώ να την περάσω σαν όρισμα. Μήπως έχεις καμιά ιδέα για το πως μπορεί να λυθεί αυτό?
aeikinitos Δημοσ. 10 Φεβρουαρίου 2008 Δημοσ. 10 Φεβρουαρίου 2008 Σου έστειλα pm. Αυτό που σου χρειαζόταν μπορεί να ήταν το >fout("file.txt",ios::app)
Apanepai Δημοσ. 12 Φεβρουαρίου 2008 Μέλος Δημοσ. 12 Φεβρουαρίου 2008 Σε ευχαριστώ την βρήκα την άκρη τελικά. Στην αρχή είχα φτιάξει ένα πολύ μπακαλίστικο τρόπο αλλα με αυτό που μου είπες έβγαλα άκρη τελικά. Σε ευχαριστώ.
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.