c++ - 在 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 风格的强制转换。所以修复这三件事,你的线路就变成了
file.write(reinterpret_cast<char*>(this), sizeof(*this));
那应该编译。
但是,请注意,如果 Employee 包含任何复杂的内容,例如std::string
成员变量、指针成员变量、虚方法、构造函数/析构函数等,则无法读取数据。在这种情况下,该写入不会写入所有内容,或者写入错误的运行时值,并且您会返回垃圾。您进入了可怕的未定义行为领域,任何事情都可能发生(包括在您测试时明显有效的事情)。
推荐阅读
- unix - awk 比较两个文件并用 NA 填充空白行
- php - 我想在 codeigniter 中构建一个高级查询
- python - Marshmallow Schema 在不同的计算机上没有数据和错误字段。代码是一样的
- python-3.x - Python3:文件正在被另一个进程使用
- macos - memcached 的 cachedump 是否应该是一致的?
- firebase - Gettting FIREBASE WARNING: transaction at [my-path] failed: 从今天开始断开连接
- java - 发送重定向到函数而不是 url
- user-defined-functions - 创建需要 STREAM 并提供 BATCH (Python) 的 Kapacitor UDF
- asp.net - 使用按钮 asp.net VB 将行添加到数据表?
- yii2 - Yii2 符号链接():无法创建符号链接,错误代码(1314)