Копирование статической переменной в поток файлов C ++ - PullRequest
0 голосов
/ 13 октября 2018

Я написал программу для удаления объекта класса , хранящегося в двоичном файле , с использованием файлового потока c ++.Я должен скопировать все объекты из одного файла (example.dat) в другой (temp.dat) во время этого процесса.

У меня есть статическая переменная как часть класса иЯ хотел бы, чтобы он был скопирован вместе с объектами. Но статическая переменная не копируется в temp.dat, и ее значение в temp.dat равно 0 , поскольку статическая переменная не является частью какого-либо объекта.

Здесьэто определение функции и класса, которое я использовал

{                                                  //the problem is in this function
    cout<<"\nSno of record to delete: ";
    int del;
    cin>>del;

        fstream o;
o.open("temp.dat",ios::out|ios::in|ios::binary);

if(!f)
{
    cout<<"File not Found";
    exit(0);
}
else
{f.seekp(0);
    f.read((char*)&dats, sizeof(dats));
    while(!f.eof())
    {
        if(dats.sno!=del)
        {
            o.write((char*)&dats, sizeof(dats));



        }

        f.read((char*)&dats, sizeof(dats));

    }


     }

o.close();
f.close();
remove("date.dat");                       
rename("temp.dat", "date.dat");



return 0; }

определение класса

class date{
int d,m,y;
int k;
char dday[10];
char monthn[10];
char name[50];


public:

int sno;
int odd ();
void getdata();
int fsno();
void display();
static int ID; //static variable
}

Пожалуйста, предложите способ обойти эту проблему

1 Ответ

0 голосов
/ 13 октября 2018

Вы не должны смешивать классы и объекты.Статические члены данных не являются частью объектов, но являются частью целого класса и совместно используются всеми экземплярами, поэтому вы должны хранить и читать их отдельно от отдельных объектов.

Например, вы можете сохранить их в начале файла:

f.seekp(0);

f.read((char*)&date::ID, sizeof(date::ID));
if (!f) { cout<<"File format bad"; exit(0); }
o.write((char*)&date::ID, sizeof(date::ID));

// go on reading objects
f.read((char*)&dats, sizeof(dats));
// ...
...