首页 > 解决方案 > 在 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));

标签: c++objectfile-handlingostreamthis-pointer

解决方案


this不是实际变量,因此您无法获取其地址。但它已经一个指针,所以你不需要。它也有指针的大小,所以你sizeof错了。然后在 C++ 中,你不应该使用 C 风格的强制转换。所以修复这三件事,你的线路就变成了

file.write(reinterpret_cast<char*>(this), sizeof(*this));

那应该编译。

但是,请注意,如果 Employee 包含任何复杂的内容,例如std::string成员变量、指针成员变量、虚方法、构造函数/析构函数等,则无法读取数据。在这种情况下,该写入不会写入所有内容,或者写入错误的运行时值,并且您会返回垃圾。您进入了可怕的未定义行为领域,任何事情都可能发生(包括在您测试时明显有效的事情)。


推荐阅读