C将对象写入二进制文件
作者:互联网
问题:
Error: The “&” operator can only be applied to a variable or other l-value.
我尝试过的:
> dynamic_cast< char *>(e)
> reinterpret_cast< char *>(e)
> static_cast< char *>(e)
>(char *)e
我正在尝试做什么:
>将数组e.data(private)写入二进制文件.
笔记:
> e.getSize()返回数组中的元素数
> e []返回Employee对象.
码:
fstream fout;
fout.open(filename.c_str(), ios::out|ios::binary);
if(fout.good())
{
for(int i=0;i<e.getSize();i++)
{
fout.write((char*)&e[i], sizeof(e[i]));
}
}
fout.close();
Employee.h
class Employee {
friend std::ostream& operator<<(std::ostream&, const Employee &);
private:
int id;
char name[50];
char address[100];
char phone[20];
char department[100];
int salary;
public:
Employee();
~Employee();
Employee(int,char[],char[],char[],char[],int);
bool operator==(Employee&);
};
从我记得fout.write((char *)& e [i],sizeof(e [i])),我迷失了该做什么.是如何写入二进制文件.
编辑:
e声明如下:
MYLIB ::铲斗和LT;员工> Ë;
template <class T>
class Bucket {
private:
T* bkt;
int size;
int capacity;
static const int stepsize = 10;
public:
Bucket();
~Bucket();
void push_back(const T&);
T operator[](int);
int getSize();
int getCapacity();
};
编辑2:
fout.write(reinterpret_cast< char *>(e [i]),sizeof(e [i]));给我第122行:错误:使用reinterpret_cast进行转换? to char *不允许. (第122行是刚引用的行)
编辑3:
tempemp = e[i];
fout.write((char*)(&tempemp), sizeof(e[i]));
编译但是给出了分段错误,我将调查原因.
编译时,分段错误看起来无关紧要.
解决方法:
我觉得
T operator[](int);
返回一个临时对象,必须绑定到某个地址才能获取地址
const Employee& emp = e[i];
fout.write((char*)&emp, sizeof(emp));
可能会有效,假设this answer是正确的,参考可以延长临时对象的寿命
另一种方法是返回对象的引用,这将删除临时对象的创建
const T& operator[](int);
标签:c,binaryfiles 来源: https://codeday.me/bug/20190831/1775303.html