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

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • 0
Apanepai

Εγγραφή σε αρχείο

Ερώτηση

Καλησπέρα παιδιά.

Έχω 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 κλάσεων ξεχωριστά δουλεύουν μια χαρά αλλά όταν καλέσω τη συνολική υπάρχει πρόβλημα.

Καμία ιδέα για το τι μπορεί να φταίει?

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες

6 απαντήσεις σε αυτή την ερώτηση

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

Νομίζω πως κατάλαβα που είναι το λάθος. Στο άνοιγμα και στο κλείσιμο των 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?

 

Εαν υπάρχει φυσικά διαφορετική προσέγγιση ειμαι όλος αυτιά.

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες

Σε ευχαριστώ την βρήκα την άκρη τελικά.

Στην αρχή είχα φτιάξει ένα πολύ μπακαλίστικο τρόπο αλλα με αυτό που μου είπες έβγαλα άκρη τελικά. Σε ευχαριστώ.

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες

Ας το θέσω αλλιώς μπας και μπορεί να βοηθήσει κανείς.

 

Πως γίνετε να δημιουργήσω ένα txt αρχείο στο οποίο να γράφω συμπληρωματικά σε 3 σταδια. Δηλαδή να γίνεται η δημιουργία του αρχείου έπειτα να γράφω σε αυτό να κλείνω το stream και έπειτα να συνεχίζω να γράφω χωρίς να σβίνονται τα παλιά δεδομένα δηλαδή να συμπληρώνω στο αρχείο.

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες

Μια απλή ιδέα που μου ήρθε στο μυαλό χωρίς πολύ σκέψη( :) ), δοκίμασε να δίνεις το ft σαν παράμετρο στην writetofile και φύγε το

ofstream fout("trexousa_katastasi.txt");

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
Μια απλή ιδέα που μου ήρθε στο μυαλό χωρίς πολύ σκέψη( :) ), δοκίμασε να δίνεις το ft σαν παράμετρο στην writetofile και φύγε το

ofstream fout("trexousa_katastasi.txt");

 

Αν κοιτάξεις το δεύτερο post θα δεις ότι και εγώ αυτό σκέφτηκα αλλά το πρόβλημα είναι ότι είναι private και δεν μπορώ να την περάσω σαν όρισμα. Μήπως έχεις καμιά ιδέα για το πως μπορεί να λυθεί αυτό?

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
×
×
  • Δημιουργία νέου...