如何从文件中读取类的指针
How to read pointer of class from file
我正在尝试将类的指针写入文件,然后读取它。写入很好,但读取显示类型转换错误。请帮忙。以这个(整数)为例。。如果我们使用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();
}
指针只是一个内存地址。正如你所说,你可以写得很好,但当你读时,它仍然只是一个内存地址。除非它所指向的对象在您读取它时位于完全相同的内存位置,否则您将"读取"一个指向随机数据的指针,您无法将其转换为它以前指向的对象的类。
这就像存储蝴蝶的位置(纬度/经度),然后试图从那个位置找到蝴蝶。蝴蝶现在在一个完全不同的地方变得最可爱了。
您正在尝试的是通常称为序列化的方法。
这个想法是编写类实例(包含的所有数据)和一个ID,该ID可以是实例的地址,因为这是一个非常独特的ID。您的序列化库会注意只编写一个实例(因为只需要一个数据集),并且该实例的所有后续写入都只通过编写指针来完成。
读后感也很简单。您的序列化库知道它需要一个类的实例,如果还没有使用唯一id(可能是前面提到的指针/地址),则使用以前编写的内容生成一个新实例。之后,每次尝试获取"读取指针"都会将指针设置为新生成实例的实际值。
看看序列化程序模式或类似boost::serialize的具体实现http://www.boost.org/doc/libs/1_58_0/libs/serialization/doc/index.html
相关文章:
- 分段错误 - 读取初始化指针的数组
- 函数如何读取指针?
- 通过指针读取文件
- 如何读取指针的值,因为这个指针是函数的返回?
- 尝试通过共享指针使用变量时读取访问冲突
- 如何使用指针直接从托管代码中的非托管代码中读取矢量数据
- 为什么不读取带有指针的结构?
- C++指针将内存读取为 0
- 使用智能指针读取访问冲突
- 从字节指针读取位的差异
- 通过具有矢量基址的指针读取矢量元素时出错
- 在Linux中,多个进程使用文件指针读取文件时使用的共享虚拟内存
- 尝试从插入的.dll中的指针读取字符串时出现Segfault
- 使用指向成员的指针读取 cons 对象的字段的值
- 有关要从结构指针读取的代码的简单代码
- 如何使用指针读取 nxn 矩阵
- 从无效指针读取--relpret_cast可以
- 从指针读取一个容器结构
- 通过指针读取多维数组或向量安全吗
- 如何从指针读取字节序列C++一样长