Hỏi cách sửa warning khi chạy code

Mấy anh cho em hỏi cách sửa lỗi warning như ảnh ạ, và chương trình em viết chỉ có thể nhập được nhưng không thể sắp xếp hay xuất ra được

#include<iostream>
#include<string>
#include<conio.h>
using namespace std;

class MONHOC {
	char tenmh[20];
	int sotiet;
public:
	MONHOC() {
		tenmh[0]=0;
		sotiet = 0;
	}
	void nhap() {
		cout << "nhap ten mon hoc: ";
		cin.ignore(); cin.getline(tenmh, 20);
		cout << "\n sotiet";
		cin >> sotiet;		
	}
	void in() {
		cout << "mon: " << tenmh << "  " << "sotiet" << sotiet;
	}
	 MONHOC& operator=( MONHOC& d) {
		sotiet = d.sotiet;
		int n = strlen(d.tenmh);
		strcpy_s(tenmh, n, d.tenmh);
		return d;
	}
};

class GIAOVIEN : public MONHOC {
	char tengv[20];
	int ns;
	int smh;
	MONHOC* mh;
public:
	GIAOVIEN() :MONHOC() {
		ns = smh = 0;
		tengv[0] = 0;
		mh = NULL;
	}
	void nhap() {
		cout << "nhap thong tin ten giao vien: ";
		cin.ignore(); cin.getline(tengv, 20);
		cout << "nam sinh va so mon day: ";
		cin >> ns >> smh;
		mh = new MONHOC[smh + 1];
		for (int i = 1; i <= smh; i++) {
			mh[i].nhap();                                       //Warning	C6385	Reading invalid data from 'mh':  the readable size is '(unsigned int)*24' bytes, but '48' bytes may be read.
		}
	}
	void in() {
		cout << "ho va ten: " << tengv << " / " << "nam sinh: " << ns << endl;
		cout << "so mon day: " << smh << endl;
		for (int i = 1; i <= smh; i++)
			mh[i].in();
	}
	~GIAOVIEN() {
		tengv[0]=ns = smh = 0;
		delete mh;
	}
	int getsmh() {
		return this->smh;
	}
	 GIAOVIEN& operator=( GIAOVIEN& d) {
		ns = d.ns;
		int m = d.smh;
		int n = strlen(tengv);
		strcpy_s(tengv, n, d.tengv);
		smh = m;
		delete mh;
		mh = new MONHOC[m + 1];
		for (int i = 1; i <= m; i++) {
			mh[i] = d.mh[i];
		}
		return d;
	}
};

class BM : GIAOVIEN {
	char tenbm[20];
	int sogv;
	GIAOVIEN* gv;
public:
	BM() :GIAOVIEN() {
		tenbm[0] = 0;
		sogv = 0;
		gv = NULL;
	}

	void nhap() {
		cout << "nhap thong tin bo mon: " << endl;
		cin.ignore(); cin.getline(tenbm, 20);
		cout << " so giao vien: ";
		cin>> sogv;
		gv = new GIAOVIEN[sogv + 1];
		for (int i = 1; i <= sogv; i++) {
			gv[i].nhap();
		}
	}
	void in() {
		cout << "bo mon:" << tenbm << "----" << "so giao vien: " << sogv << endl;
		for (int i = 1; i <= sogv; i++) {
			gv[i].in();
		}
	}
	~BM() {
		tenbm [0]= sogv = 0;
		delete gv;
	}
	void sapxep() {
		GIAOVIEN tempt;
		for (int i = 1; i < sogv; i++) {
			for (int j = 2; j <= sogv; j++) {
				if (gv[i].getsmh() < gv[j].getsmh()) {
					tempt = gv[i];
					gv[i] = gv[j];
					gv[j] = tempt;
				}
			}
		}
	}
};

int main() {
	BM p;
	p.nhap();
	
	p.sapxep();
	p.in();
	return 0;
}

Sao GIAOVIEN lại kế thừa từ MONHOC vậy bạn?
BM lại kế thừa từ GIAOVIEN???
Bạn sai từ khoản kế thừa nên hãy bỏ qua cảnh báo mà sửa chỗ này trước, có thể sửa xong thì cảnh báo sẽ tự mất.

5 Likes

em bỏ mấy cái kế thừa rồi nhưng vẫn chỉ chạy được mỗi hàm nhập à anh. anh xem giúp em với

Chạy chế độ Gỡ lỗi (Debug) đi bạn. Đưa cái hình đó thì mình sửa cho bạn bằng mắt? Không biết lỗi từ dòng nào thì sao mà sửa.

2 Likes

em sửa được rồi ạ, thanks anh hihhi

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