Khởi tạo 1 static fstream trong 1 class

class KhachHang: public Nguoi
{
	protected:
		int maKhachHang;
		int kieuPhong;
		string moTa;
	public:
		static fstream f;
		void nhap();
		void ghiFile();
		void hienThi();
};
fstream KhachHang::f.open("KH.DAT",ios::in);

Mình có phần code như trên. Có lỗi . Mình ko hiểu tại sao lại lỗi và sửa lại như thế nào? Vì ý của mình muốn 1 file được dùng chung trong class KhachHang. :v Mình cảm ơn

bỏ 5 chữ .open đi

cái biến f này gọi là biến toàn cục kiểu sáng tạo à? :V

1 Like

Nên để cho một singleton giữ cái file (database…) đó. “Separation of concern” :smiley: khổ nỗi singleton thì không thể mock, mong có cách nào hay hơn.

1 Like

Nếu gọi biến toàn cục thì mình hiểu và làm được. Nhưng mình ko muốn khai báo biến toàn cục mà thử dùng static xem có khai báo được file với static với class này ko? Ý mình muốn hỏi là như vậy

Nó cần khởi tạo f:

fstream KhachHang:f;

Sau đó thì dòng “fstream KhachHang::f.open(“KH.DAT”,ios::in);” nó là một hàm và nó sẽ phải được gọi trong hàm khác. Không được gọi thế kia.

class KhachHang: public Nguoi
{
	protected:
		int maKhachHang;
		int kieuPhong;
		string moTa;
	public:
		static fstream f;
		void nhap();
		void ghiFile();
		void hienThi();
};
fstream KhachHang::f;

void KhachHang::ghiFile(){
    if(!f.is_open()) f.open("KH.DAT",ios::in);
    char kh[]="Maria Ozawa";
    f.write((char*)&kh, sizeof(kh));
    f.close();
}
1 Like

Mình hiểu r . Cảm ơn nhiều nha :v

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?