01/10/2018, 00:29

Bị lỗi khi sử dụng thành viên static cho class trong C++

Em đang học sử dụng thành viên static cho class, khi làm thử một bài tập thì bị báo lỗi nhưng em không hiểu tại sao (lỗi LNK2001), mong các anh chị xem giúp code của em và chỉ giáo ạ! em cảm ơn !!

#include <iostream>
#include <string>
using namespace std;

class HocSinh
{
private:
	char *hoTen;
	float diemToan,diemVan,diemAnh,dtb;
	int MSSV_CaNhan;
	static int MSSV;
	static float dtbMax;
	static HocSinh HSG;
public:
	HocSinh();
	HocSinh(char*, float, float, float);
	~HocSinh();
	void DatHoTen(char*);
	void GanDiem(float,float,float);
	friend ostream &operator<<(ostream &out, const HocSinh &hs);
	static HocSinh HSDiemTBCaoNhat();
};

void main()
{
	HocSinh hs1;
	hs1.DatHoTen("Nguyen Van A");
	hs1.GanDiem(7, 8, 10);
	HocSinh hs2("Tran Thi B", 5, 8, 4.5);
	HocSinh hs3("Hoang Thi C", 9.5, 8.5, 4.5);
	HocSinh hs4("Le Van D", 7.5, 9, 10);
	//"HS: Nguyen Van A, MS: 1363001, DTB: 7.53"
	cout << hs1 << endl << hs2 << endl << hs3 << endl << hs4 << endl << endl;
	cout << "Hoc sinh co diem TB cao nhat:" << endl;
	cout << HocSinh::HSDiemTBCaoNhat() << endl;
	system("pause");
}

int HocSinh::MSSV = 1363002;
float HocSinh::dtbMax = -1;

HocSinh::HocSinh()
{
	diemToan=diemVan=diemAnh=dtb=0;
	this->hoTen=new char[1];
	this->hoTen[0]='';
	this->MSSV_CaNhan=MSSV;
	MSSV++;
	if(this->dtb>dtbMax)
	{
		dtbMax=this->dtb;
		HSG=*this;
	}
}
HocSinh::HocSinh(char *hoTen, float dt, float dv, float da)
{
	this->diemToan=dt;
	this->diemVan=dv;
	this->diemAnh=da;
	this->dtb=(diemToan+diemVan+diemAnh)/3;
	this->hoTen=new char[strlen(hoTen)+1];
	strcpy(this->hoTen,hoTen);
	if(this->dtb>dtbMax)
	{
		dtbMax=this->dtb;
		HSG=*this;
	}
	this->MSSV_CaNhan=MSSV;
	MSSV++;
}

HocSinh::~HocSinh()
{
	delete this->hoTen;
}

void HocSinh::DatHoTen(char *hoTen)
{
	this->hoTen=new char[strlen(hoTen)+1];
	strcpy(this->hoTen,hoTen);
}

void HocSinh::GanDiem(float dt, float dv, float da)
{
	this->diemToan=dt;
	this->diemVan=dv;
	this->diemAnh=da;
	this->dtb=(diemToan+diemVan+diemAnh)/3;
	if(this->dtb>dtbMax)
		dtbMax=this->dtb;
}

HocSinh HocSinh::HSDiemTBCaoNhat()
{
	return HSG;
}

ostream &operator<<(ostream &out, const HocSinh &hs)
{
	out<<"HS: "<<hs.hoTen<<", MS: "<<hs.MSSV_CaNhan<<", DTB: "<<hs.dtb<<endl;
	return out;
}

Đề bài yêu cầu in ra màn hình như thế này ạ:


Em cảm ơn ạ!!!

Pham Van Hai viết 02:31 ngày 01/10/2018

`#include <string>

Sửa thành #include <cstring>
và thêm #include<windows.h>

secret viết 02:30 ngày 01/10/2018

vẫn bị lỗi y như vậy luôn đó anh

Pham Van Hai viết 02:41 ngày 01/10/2018

Mình chưa biết nhiều về C++, ráng tìm hiểu giúp bạn theo như stackoverflow giải thích thì giải pháp là thêm dòng này nữa sau khai báo class:
HocSinh HocSinh::HSG;

Bạn tham khảo thêm theo link:

stackoverflow.com
Amit Tomar

static class member of class's own type

c++, recursion, static, member
asked by Amit Tomar on 06:42AM - 28 Mar 12

Nguyễn Xuân Phúc viết 02:43 ngày 01/10/2018

class HocSinh
{
private:
char *hoTen;
float diemToan,diemVan,diemAnh,dtb;
int MSSV_CaNhan;
static int MSSV;
static float dtbMax;
static HocSinh HSG;

chưa biết class HocSinh là gì, mà trong HocSinh lại có HocSinh, thế cuối cùng HocSinh là gì :3

Bài liên quan
0