問題:
エラー: "&" 演算子は、変数または他の左辺値にのみ適用できます。
私が試したこと:
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]));
コンパイルはできますが、セグメンテーション エラーが発生します。原因を調査します。
コンパイルすると、セグメンテーション違反は無関係に見えます。