在 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!";

}

这是我试过的。 我想将 employee class 的当前对象以二进制模式存储到一个文件中。 但我明白了这个

error: lvalue required as unary '&' operand
     file.write((char*)&this,sizeof(this));

该语言不允许使用 &this 作为表达式,因为 (https://timsong-cpp.github.io/cppwp/n3337/class.this#1)

the keyword this is a prvalue expression

您只能在左值表达式上使用 addressof (&) 运算符。

更重要的是,你需要使用

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

保存对象。

this 不是一个实际的变量,所以你不能获取它的地址。但它已经一个指针,所以你不需要。它也有一个指针的大小,所以你的 sizeof 是错误的。然后在 C++ 中你不应该使用 C 风格的转换。所以解决这 3 件事,你的行变成

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

应该编译。

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