Dùng static trong class

Mình có đoạn code này ạ

#include <iostream>
#include <algorithm>
using namespace std;
class BMI
{
	private:
		static float chieuCao;
		static float canNang;
		static float bMI;
	public:
		BMI()
		{
			chieuCao=0;
			canNang=0;
			bMI=0;
		}
		BMI(float chieuCao,float canNang)
		{
			this->chieuCao=chieuCao;
			this->canNang=canNang;
		}
		static void Nhap();
		static float TinhBMI();
		static string HienThi();
};
float BMI::TinhBMI()
{	
	bMI=(float)canNang/(chieuCao*chieuCao);
	return bMI;
}
string BMI::HienThi()
{
	float t=TinhBMI();
	if(t<18.5)
		return "Thieu can";
	else if(t<25)
		return "Trung binh";
	else if(t<30)
		return "Thua can";
	else
		return "Beo phi";
}
void BMI::Nhap()
{
	cout << "Nhap chieu cao ";
	cin >> chieuCao;
	cout << "Nhap can nang ";
	cin >> canNang;
}

int main()
{
	//BMI a;
	BMI::Nhap();
	cout << BMI::HienThi();
}

Vì mình ko muốn gọi một gọi 1 object mà sử dụng static để gọi trực tiếp hàm nhưng khi build lại hiển thị lỗi ntn ạ :

C:\Users\user\AppData\Local\Temp\ccZdBcMj.o	L3-BAI2.cpp:(.rdata$.refptr._ZN3BMI3bMIE[.refptr._ZN3BMI3bMIE]+0x0): undefined reference to `BMI::bMI'
C:\Users\user\AppData\Local\Temp\ccZdBcMj.o	L3-BAI2.cpp:(.rdata$.refptr._ZN3BMI7canNangE[.refptr._ZN3BMI7canNangE]+0x0): undefined reference to `BMI::canNang'
C:\Users\user\AppData\Local\Temp\ccZdBcMj.o	L3-BAI2.cpp:(.rdata$.refptr._ZN3BMI8chieuCaoE[.refptr._ZN3BMI8chieuCaoE]+0x0): undefined reference to `BMI::chieuCao'
D:\OOP-C++\collect2.exe	[Error] ld returned 1 exit status

Mọi người giải thích dùm mình với ạ. Mình cảm ơn :blush:

Đã khởi tạo giá trị cho mấy thằng biến static đâu ?
Nên nó mới báo :“undefined reference to …”

1 Like

C++ chứ có phải Java đâu :smiley:

2 Likes

Hi Đỗ Nam.
Bạn xem lại lý thuyết về hàm static. Nếu đã dùng hàm static thì truyền các biến vào khi gọi hàm luôn : static float TinhBMI(float, float);. Vì hàm đó không gắn với đối tượng nào nên không biết thuộc tính chiều cao cân nặng của ai.
VD.

BMI a, b, c;
BMI::Nhap(); // Nhập vào a, b, hay c ???
2 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?