在 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 读回数据。在那种情况下,该写入不会写入所有内容,或者写入错误的运行时值,并且您会得到垃圾。您进入了可怕的 未定义行为 领域,任何事情都可能发生(包括在您测试时显然有效的事情)。
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 读回数据。在那种情况下,该写入不会写入所有内容,或者写入错误的运行时值,并且您会得到垃圾。您进入了可怕的 未定义行为 领域,任何事情都可能发生(包括在您测试时显然有效的事情)。