使用此指针在 c++ 中将对象写入二进制文件
Using this pointer to write object to binary file in c++
void Employee::store_data(string filename) {
fstream file;
file.open(filename,ios::app | ios::binary);
if (file) {
file.write((char*)&this,sizeof(this));
file.close();
}
else cout<<"n Error in Opening the file!";
}
这就是我尝试过的。 我想将员工类的当前对象以二进制模式存储到文件中。 但我明白这个
error: lvalue required as unary '&' operand
file.write((char*)&this,sizeof(this));
this
不是实际变量,因此您无法获取其地址。但它已经是一个指针,所以你不需要。它还有一个指针的大小,所以你的sizeof
是错误的。然后在C++中,您不应该使用 C 样式转换。所以解决这 3 件事,你的线变成了
file.write(reinterpret_cast<char*>(this), sizeof(*this));
这应该编译。
但是,请注意,如果 Employee 包含任何复杂内容,例如std::string
成员变量、指针成员变量、虚拟方法、构造函数/析构函数等,则无法读回数据。在这种情况下,该写入不会写入所有内容,或者写入错误的运行时值,并且您会返回垃圾。你进入可怕的未定义行为领域,任何事情都可能发生(包括测试时显然有效的事情(。
该语言不允许使用&this
作为表达式,因为 (https://timsong-cpp.github.io/cppwp/n3337/class.this#1(
关键字
this
是一个 prvalue 表达式
您只能在左值表达式上使用addressof
(&
( 运算符。
更重要的是,您需要使用
file.write(reinterpret_cast<char const*>(this), sizeof(*this));
以保存对象。
相关文章:
- 对在不同二进制文件中创建的对象文件的依赖关系
- 如何将包含另一个对象向量的对象保存到文件中,并使用C++中的二进制文件从文件中读回?
- 使用此指针在 c++ 中将对象写入二进制文件
- 将对象信息保存到二进制文件中
- 如何使用自定义对象的序列化在 c++ 中编写自定义二进制文件处理程序
- C#将类对象写入二进制文件
- C++/Python 中对象和结构的二进制文件结构
- 将对象(指针)在地图中输出到二进制文件
- 未显式引用对象的全局对象构造函数在最终二进制文件 - LD 中被丢弃
- 使用 C++ 将对象读取和写入二进制文件
- 正在从二进制文件中读取对象列表
- C++ - 如何编写和读取包含对象的结构?(写入和读取二进制文件)
- C++ 将对象写入二进制文件
- 将二进制文件的一部分读入预先存在的basic_string对象
- 如何像二进制文件一样读取提升mapped_region对象
- CMake:从外部项目链接共享C++对象会生成具有相对路径的二进制文件,而不是绝对路径
- 对于二进制数据,哪个性能更高:将整个对象写入文件或分隔变量(无对象)
- c++这个将对象写入二进制文件
- c++将对象写入和读取到二进制文件中
- 将二进制文件用于复杂对象C++