2015-11-08 2 views
-2

Это мой * .hDeserialize экземпляр класса в C++

class ip_file_handler { 

    struct IPheader { 
     unsigned short int ver :4; 
     unsigned short int ihl :4; 
     unsigned short int total_length; 
     unsigned char tos; 
     unsigned char ttl; 
     unsigned char protocol; 
     unsigned int checksum; 
     unsigned short int identification; 
     unsigned short int flag_offset; 
     unsigned int ucSource; 
     unsigned int ucDestination; 
    }; 

    public: 

    ip_file_handler(){} 

    // func 1 (file to ip) 
    static bool file_to_ip_packets(std::string input_file_name, 
            std::string output_file_name, 
            unsigned int source_ip, 
            unsigned int destination_ip); 

    private: 

    IPheader ipInfo; 
    list<string> data; 
}; 

в * .cpp:

все данные из файла в MyHandler.

эта строка класса записи в файл:

ofstream outFile(output_file_name.c_str(), ios::out | ios::binary); 
ip_file_handler myHandler; 
outFile.write((char*) &myHandler,sizeof(ip_file_handler)); 

/* здесь проблема */ эта линия чтения класс из файла:

ip_file_handler tmp; 
outFile2.read((char*) &tmp, sizeof(ip_file_handler)); 

теперь, почему не может прочитать класс из файла! ? outFile is'nt empty!

Благодарим за всех. Adam

+0

В общем, небезопасно бинарное копирование объекта в файл и двоичный сброс обратно в память. Вам нужно добавить функции (или операторы потоков) для записи/чтения каждого элемента вручную. –

+2

Правильно составите свой вопрос и используйте правильную орфографию и грамматику. Если вы не прилагаете никаких усилий в своем вопросе, не ожидайте, что незнакомые люди будут заботиться о вашей проблеме. –

ответ

1

Данные этого списка (eh, data) не хранятся в вашем классе, но выделяются отдельно в кучу. Он не будет сохранен в файле, когда вы просто выгрузите копию ip_file_handler.

Вам придется записывать каждую из строк в списке отдельно и воссоздавать список при повторном чтении их снова.

+0

Спасибо Бо Перссон, я попробую это. –

Смежные вопросы