[英]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.