30/09/2018, 16:17

Lỗi: no appropriate default constructor available?

#include<iostream>


using namespace std;

class DongVat
{
protected:
	double canNang;
public:
	DongVat(double w);
	void inDL();
};
class SuTu: public DongVat{
private:
	double tocDo;
public:
	SuTu(double w, double s);
	void inDL();
};
class TranNuoc: public DongVat{
private:
	double chieuDai;
public:
	TranNuoc(double w, double t);
	void inDL();
};
int main()
{
	SuTu s1(200, 120);
	cout << "Thong tin cua  Su Tu:";
	s1.inDL();
	cout<<endl;
	TranNuoc t1(250 , 3);
	cout << "Thong tin cua Tran Nuoc: ";
	t1.inDL();
	cout <<endl;
	system("pause");
	return 0;
}
DongVat::DongVat(double w):canNang(w){
}
void DongVat::inDL(){
	cout << "
Can nang: "<<canNang;
}
SuTu::SuTu(double w, double s):tocDo(s){ //Dong 46.
	DongVat::DongVat(w);
}
void SuTu::inDL(){
	DongVat::inDL();
	cout << "
Toc do: "<<tocDo;
}
TranNuoc::TranNuoc(double w, double t):chieuDai(t){ //Dong 53.
	DongVat::DongVat(w);
}
void TranNuoc::inDL(){
	DongVat::inDL();
	cout << "
Chieu dai: "<<chieuDai;
}

nó báo lỗi : error C2512: ‘DongVat’ : no appropriate default constructor available. Ở dòng 46 và 53.

Vậy có nghĩa là sao vậy, mong mọi người giúp mình.

Lập Trình Sư viết 18:19 ngày 30/09/2018

Bạn cần có constructor default, tức là constructor không có tham số, hãy thêm và khai báo cái này.

Thành Nam viết 18:33 ngày 30/09/2018

OK. thanks bạn. Chương trình chạy được rồi. Tiện đây bạn cho mình hỏi câu này với :Khai báo dv1 là con trỏ thuộc kiểu DongVat. Gán dv1 bằng địa chỉ của s1. Gọi hàm inDL thông qua con trỏ dv1. Sau đó thay đổi dv1 sao cho nó chứa địa chỉ của t1. Gọi hàm inDL thông qua con trỏ dv1… Mình làm như này:

int main()
{
          DongVat *dv1;
          SuTu s1(200, 120);
          dv1 = &s1;
          cout << "Thong tin cua  Su Tu:";
	*dv1.inDL();

Không chạy được bạn à…

Nguyễn Minh Dũng viết 18:33 ngày 30/09/2018

@Thanh_Nam nên đặt câu hỏi mới ra topic mới, khi topic này đã giải quyết xong được câu hỏi ban đầu.

Lập Trình Sư viết 18:33 ngày 30/09/2018

Chắc là phải như thế này.

dv1->inDL();

hoặc

(*dv1).inDL();
Thành Nam viết 18:20 ngày 30/09/2018

Dạ vâng. Em hiểu rồi ạ.

Thành Nam viết 18:32 ngày 30/09/2018

@laptrinhio ok. Cảm ơn bạn nhiều nhé.

Bài liên quan
0