如何从文件中读取类的指针

时间:2013-07-27 21:47:29

标签: c++

我正在尝试将类的指针写入文件然后读取它。写作很好,但阅读显示类型转换错误。请帮忙。 举个例子(整数)..如果我们使用int而不是int *那么代码执行但不是很好。

#include<iostream>    
#include<windows.h>
#include<fstream>
using namespace std;   
void save(int *ptr)
{
    ofstream data;
    data.open("info.txt",ios::app);
    if (data.is_open())
    {
        data<<ptr;
        data.close();
    }
    else 
    {
        cout << "Unable to open file";
    }

}

int* loaddata()
{
    ifstream data;
    int ptr;


    data.open("info.txt");
    if (data.is_open())
    {
        while (!data.eof() )
        {
            data>>ptr;
        }

        data.close();
    }
    else 
    {
        cout << "Unable to open file";
    }

    return ptr;


}

void main()
{
    int a=0;

    save(&a);

    int *ptr=loaddata();
}

2 个答案:

答案 0 :(得分:2)

指针只是一个内存地址。正如你所说,你可以写得很好,但当你它时,它仍然只是一个内存地址。除非它所指向的对象在读取时位于完全相同的内存位置,否则您将“读取”指向随机数据的指针,您无法将其转换为之前指向的对象的类。

就像存储蝴蝶的位置(纬度/经度),然后试图从那个位置找到那只蝴蝶。现在,蝴蝶在一个完全不同的地方最为可能。

答案 1 :(得分:0)

您正在尝试的是通常称为序列化。

这个想法是编写类实例(包含所有数据)和一个ID,它可以是实例的地址,因为这是一个非常独特的id。您的序列化库需要注意只写入一个实例(因为只需要一个数据集),并且只能通过编写指针来完成此实例的所有后续写入。

回读也很简单。序列化库知道它需要一个类的实例,如果没有使用唯一的id(可能是前面提到的指针/地址),则生成一个新的内容,如前所述。之后,每次尝试获得一个&#34;读指针&#34;导致将指针设置为新生成的实例的实际值。

查看序列化程序模式或具体实现,如boost :: serialize http://www.boost.org/doc/libs/1_58_0/libs/serialization/doc/index.html