01/10/2018, 13:42

Cách xử lý lỗi error c2011

Định nghĩa chồng khi 1 lớp hoặc cấu trúc được gọi 2 lần trong 1 file nguồn. Đây là lỗi thời gian biên dịch và thường xuất hiện khi gọi nhiều file header trong 1 file header khác, làm cho header được gọi 2 lần khi bạn biên dịch file nguồn (trong MSVC, lỗi này có dạng như “error CS2011: ‘MyStruct’ : ‘struct’ type redefinition).

em có 3 file như sau

quanlysach.h

struct sach
{
	char masach[10];
	char tensach[100],theloai[60],NXB[60],tacgia[60];
	int slsach,slhientai,slsbimuon,Namxb;
	long giasach;
};
void nhapthongtinsach(sach Sach[],int &M);
void thongtinsach(sach S[],int M);
void luuttsach(sach S[],int M);
void doctt_sach(sach S[],int &M);
void themsach(sach S[],int &M,int slsthem);
void chinhsuasach(sach S[],int index,int M);
void xoattsach(sach S[],int &M,int index);
int laychiso_ISBN(sach S[],char ISBN[10],int M);
void timkiemtheotensach(sach S[],char tensach[100],int M);
void xuattt1cuonsach(sach S[],int index4);
int kiemtramasach(sach S[],char masach[10],int M,int index);

docgia.h

struct DATE
{
	int ngay,thang,nam;
};
struct docgia
{
	char madocgia[10];
	char tendocgia[60];
	char CMND[10];
	char diachi[60];
	char email[60];
	char gioitinh[4];
	struct DATE ngaysinh;
	struct DATE ngaylapthe;
	struct DATE ngayhethanthe;
};
void xuatdocgia(docgia DG[],int N);
void nhapthongtin(docgia DG[],int &N);
void ghifile(docgia DG[],int N);
void docfile_dg(docgia DG[],int &N);
void xoadocgia(docgia DG[],int &N,int index1);
int laychiso(docgia DG[],char madocgia[10],int N);
void sttdg(docgia DG[],int index);
void themdocgia(docgia DG[],int Slthem, int &N);
void xoadocgia(docgia DG[],int &N,int index1);
int laychiso_cmnd(docgia DG[],char CMND[10],int N);
void timdgtheohoten(docgia DG[],char tendocgia[60],int N);
void xuatthongtin1dg(docgia DG[],int index);

muonsach.h

struct DATE
{
	int ngay,thang,nam;
};
struct phieumuon
{
	char maphieu[10];
	char madocgiamuon[10];
	char tendgmuonsach[60];
	DATE ngaymuon;
	DATE ngaytra_dk;
	char ISBN_muon[3][100];
	int slsmuondoc;
};
void nhapngay(DATE ngaymuon);
bool kiemtrasach(sach S[],int index);
bool kiemtra_maphieu(phieumuon PM[], char maphieu[10],int sophieu);
void lapphieumuonsach(docgia DG[], sach S[],phieumuon PM[],int N,int M,int &sophieu);
void lapphieumuonsach(docgia DG[], sach S[],phieumuon PM[],int N,int M,int &sophieu);
void inphieumuon(phieumuon PM[],sach S[],int M,int index);
int namnhuan(int nam);
int ktthang(int thang,int nam);
void ngayhethan(DATE &ngaymuon,DATE &ngaytra_dk);
int vitri(DATE ngay);
int songaymuon(DATE ngaymuon, DATE ngaytra);

đây là đoạn nó báo lỗi

mong các anh chị giúp em với

Nhat Nguyen viết 15:44 ngày 01/10/2018


rogp10 viết 15:44 ngày 01/10/2018

void themdocgia(docgia DG[],int Slthem, int &N);

Câu này không phải C.
Đúng lí thì bọc vào #ifndef... #define... #endif, nhưng VS đã có #pragma once.

Nhat Nguyen viết 15:49 ngày 01/10/2018

à tại em chưa học con trỏ nên thầy cho phép dùng lộn qua C++

Nhat Nguyen viết 15:54 ngày 01/10/2018

khi bọc #ifndef… #define#endif thì làm sao để em có thể lấy đc định nghĩa 1 struct trong file .h này qua file .h khác, hay là em phải định nghĩa lại một cái struct tương tự nhưng khác tên ạ

Bài liên quan
0