3

問題:

エラー: "&" 演算子は、変数または他の左辺値にのみ適用できます。

私が試したこと:

  • dynamic_cast<char*>(e)
  • reinterpret_cast<char*>(e)
  • static_cast<char*>(e)
  • (char*) e

私がやろうとしていること:

  • 配列 e.data (プライベート) をバイナリ ファイルに書き込みます。

ノート:

  • 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::Bucket<Employee> e;

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 行目: Error: Using reinterpret_cast to convert from ? が表示されます。to char* は許可されていません。(122行目は今引用した行です)

編集3:

tempemp = e[i];
fout.write((char*)(&tempemp), sizeof(e[i]));

コンパイルはできますが、セグメンテーション エラーが発生します。原因を調査します。 コンパイルすると、セグメンテーション違反は無関係に見えます。

4

2 に答える 2