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 ạ!!!
Bài liên quan
Sửa thành
#include <cstring>
và thêm
#include<windows.h>
vẫn bị lỗi y như vậy luôn đó anh
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
static class member of class's own type
chưa biết class HocSinh là gì, mà trong HocSinh lại có HocSinh, thế cuối cùng HocSinh là gì :3