其他分享
首页 > 其他分享> > C将对象写入二进制文件

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;员工&GT Ë;

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