2015-11-08 127 views
-2

这是我的* .h反序列化类实例++

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

谢谢波佩尔森,我会试试这个。 –

相关问题