|
|
|
запись объектов в файл
|
|||
|---|---|---|---|
|
#18+
Добрый день, мне надо записать оъекты разных типов в файл: template<class T> class ReadWriteToFile { private: T *obj; public: ReadWriteToFile(T *); ReadWriteToFile(T &x); ~ReadWriteToFile(){delete [] obj;} void writetofile(fstream& ); void readfromfile(fstream&); void writetoend(fstream&); void show(); }; template<class T> ReadWriteToFile<T>::ReadWriteToFile(T *ob) { obj=new T;//(ob); obj=ob; } //************************************** template<class T> ReadWriteToFile<T>::ReadWriteToFile(T &x) { obj=new T(x.ob); } //************************************** template<class T> void ReadWriteToFile<T>::writetofile(fstream &ot) { ot.write(reinterpret_cast<T*>(&obj),sizeof(obj)); } //********************************* int main () { char namefile[10]; cout<<"Enter the file name of you file you want to enter the student objs:"; cin>>namefile; ofstream ot; ifstream in; ot.open(namefile,ios::out|ios::binary|ios::ate); //for write and add assert(ot); in.open(namefile,ios::out|ios::binary); //for reading assert(in); student s1("misha",1,23424); rrs1.writetofile(ot); при попытке вызова ф-и rrs1.writetofile(ot); все время получаю ошибку: my_program\tar13\tar13.cpp(87) : error C2664: 'writetofile' : cannot convert parameter 1 from 'class std::basic_ofstream<char,struct std::char_traits<char> >' to 'class std::basic_fstream<char,struct std::char_traits<char> > &' A reference that is not to 'const' cannot be bound to a non-lvalue Error executing cl.exe. помогите пожалуйста решить проблему! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.06.2005, 15:36 |
|
||
|
запись объектов в файл
|
|||
|---|---|---|---|
|
#18+
Ну во-первых не при попытке вызова, а при попытке трансляции :) Во-вторых, сравни строки из сообщения об ошибке: class std::basic_ofstream<char,struct std::char_traits<char> >и class std::basic_fstream<char,struct std::char_traits<char> > и увидишь разницу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2005, 16:47 |
|
||
|
запись объектов в файл
|
|||
|---|---|---|---|
|
#18+
и в третьих, если у сохраняемых объектов есть виртуальные функции, то такой write(reinterpret_cast<T*>(&obj),sizeof(obj)); метод не годится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2005, 16:53 |
|
||
|
запись объектов в файл
|
|||
|---|---|---|---|
|
#18+
qи в третьих, если у сохраняемых объектов есть виртуальные функции, то такой write(reinterpret_cast<T*>(&obj),sizeof(obj)); метод не годится. Виртуальные не очень страшно, а вот если есть динамические объекты, созданные с помощью new, то труба. Там в тексте других косяков хватает. template<class T> ReadWriteToFile<T>::ReadWriteToFile(T *ob) { obj=new T;//(ob); obj=ob; } Объект создали, а потом единственный указатель на него изменили. Это же не Java. Сборщик мусора его не удалит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2005, 17:08 |
|
||
|
|

start [/forum/topic.php?fid=57&fpage=402&tid=2033190]: |
0ms |
get settings: |
8ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
31ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
42ms |
get tp. blocked users: |
1ms |
| others: | 207ms |
| total: | 328ms |

| 0 / 0 |
