繁体   English   中英

使用该指针将 object 写入 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!";

}

这就是我尝试过的。 我想将员工 class 的当前 object 以二进制模式存储到文件中。 但我明白了这个

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成员变量、指针成员变量、虚方法、构造函数/析构函数等,则无法将数据读回。 在这种情况下,该写入不会写入所有内容,或者写入错误的运行时值,并且您会返回垃圾。 您进入了可怕的未定义行为领域,任何事情都可能发生(包括在您测试时明显有效的事情)。

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

关键字this是纯右值表达式

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

更重要的是,您需要使用

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

保存 object。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM