Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 11 kết quả

Đề tài: Bị Lỗi Khi CODE đa xạ

  1. #1
    Ngày gia nhập
    09 2009
    Bài viết
    9

    Mặc định Bị Lỗi Khi CODE đa xạ

    Tình hình là đang làm bài tập về đa xạ trong OOP để cải thiện điểm thi cuối kỳ...

    Bài tập về việc quản lý xe.

    Lớp Xe là lớp cơ sở có các thuộc tính thuần ảo.
    Lớp XeThoSo là lớp kế thừa public lớp Xe
    Lớp XeDongCo là lớp kế thừa public lớp Xe

    Trong Lớp XeThoSo thì có lớp XeDap và XeXichLo kế thừa public
    Trong Lớp XeDongCo thì có lớp XeKhach và XeTai kế thừa public


    Mình code toàn bộ thì nó không báo lỗi... nhưng đến hàm main:
    ... Khi gõ: Xe *dsxe = new XeDap;
    dsxe ->Xuat();
    .... thì báo lỗi như thế này :
    unresolved external symbol "public: __thiscall CXeThoSo::CXeThoSo(void)" (??0CXeThoSo@@QAE@XZ)

    Sư huynh nào nhiệt tình giúp đỡ với.... Cảm ơn

  2. #2
    Ngày gia nhập
    04 2010
    Nơi ở
    Thâm sơn cùng cốc
    Bài viết
    825

    Post code lên bạn ạ. Và đặt trong thẻ code, không ai biết bạn cài đặt ra sao thì làm sao mà giúp

  3. #3
    Ngày gia nhập
    10 2009
    Nơi ở
    Close All
    Bài viết
    993

    không thấy code mô tả thì trời mới test & fixbug đc

  4. #4
    Ngày gia nhập
    09 2009
    Bài viết
    9

    Đây là phần cài đặt các lớp
    Code:
    #include "stdafx.h"
    
    #ifndef _CXE_H_
    #define _CXE_H_
    
    #include <iostream.h>
    
    class CXe
    {
    	public:
    		virtual void Xuat() = 0;	
    		virtual char* LayTen() = 0;
    		virtual int SoBanhXe() = 0;
    		virtual bool CoDongCo() = 0;
    		virtual int LuongXangTieuThu() = 0;
    		virtual int SoNamDuocPhepLuuThong() = 0;
    		virtual int SoNguoiDuocChoToiDa() = 0;
    		virtual int TaiTrongToiDa() = 0;
    };
    
    #endif
    
    class CXeThoSo : public CXe
    {
    	public:
    		CXeThoSo();
    
    		~CXeThoSo()
    		{
    
    		};
    		
    		virtual int SoNamDoBen() = 0;
    		void Xuat();
    };
    
    
    ///////////////////////////////////////////////////
    class CXeDap : public CXeThoSo
    {
    	private:
    		int sonam;
    
    	public:
    		CXeDap()
    		{
    			sonam = 1;
    		};
    
    		CXeDap(const int &nam)
    		{
    			sonam = nam;
    			if (sonam < 1 || sonam > 5)
    				sonam = 1;
    		}
    
    		~CXeDap()
    		{
    			return;
    		};
    				
    		char* LayTen();
    		int SoNamSuDung()
    		{
    			return sonam;
    		};
    		int SoBanhXe();
    		bool CoDongCo();
    		int LuongXangTieuThu();
    		int SoNamDuocPhepLuuThong();
    		int SoNguoiDuocChoToiDa();
    		int TaiTrongToiDa();
    		int SoNamDoBen();
    };
    
    
    ///////////////////////////////////////////////////
    class CXichLo : public CXeThoSo
    {
    	private:
    		int sonam; // so nam da hoat dong
    		int solan; // so lan bao tri
    
    	public:
    		CXichLo()
    		{
    			sonam = 0;
    			solan = 0;
    		};
    
    		CXichLo(const int &nam, const int &lan)
    		{
    			sonam = nam;
    			solan = lan;
    
    			if (sonam < 0 || sonam > 7)
    				sonam = 0;
    			if (solan < 0 || solan > 5)
    				solan = 0;
    		}		
    
    		~CXichLo()
    		{
    			return;
    		};
    		
    		char* LayTen();
    
    		int SoNamHoatDong()
    		{
    			return this->sonam;
    		};
    		int SoLanBaoTri()
    		{
    			return this->solan;
    		};		
    		
    		int SoBanhXe();
    		bool CoDongCo();
    		int LuongXangTieuThu();
    		int SoNamDuocPhepLuuThong();
    		int SoNguoiDuocChoToiDa();
    		int TaiTrongToiDa();
    		int SoNamDoBen();
    };
    
    
    class CXeCoDongCo : public CXe
    {
    	public:
    		CXeCoDongCo();
    
    		~CXeCoDongCo()
    		{
    
    		};
    		
    		virtual int TocDoToiDa() = 0;
    		void Xuat();
    };
    
    
    ///////////////////////////////////////////////
    class CXeKhach : public CXeCoDongCo
    {
    	private:
    		int tocdo; // toc do toi da
    		int sobanhxe; // so banh xe
    		int songuoi; // so nguoi duoc cho toi da
    		int luongxang; // luong xang xe tieu thu
    		int sonam; // so nam da bao tri
    
    	public:
    		CXeKhach()
    		{
    			tocdo = 100;
    			sobanhxe = 4;
    			songuoi = 20;
    			luongxang = 6;
    			sonam = 0;
    		};
    
    		CXeKhach(const int &vantoc, const int &banhxe, const int &nguoi, const int &xang, const int &nam)
    		{	
    			tocdo = vantoc;
    			sobanhxe = banhxe;
    			songuoi = nguoi;
    			luongxang = xang;
    			sonam = nam;
    
    			if (tocdo < 100 || tocdo> 200)
    				tocdo = 100;
    			if (sobanhxe < 4 || sobanhxe > 8)
    				sobanhxe = 4;
    			if (songuoi < 20 || songuoi > 50)
    				songuoi = 20;
    			if (luongxang < 6 || luongxang > 15)
    				luongxang = 6;
    			if (sonam < 0 || sonam > 3)
    				sonam = 0;
    		};
    
    		~CXeKhach()
    		{
    			return;
    		};
    		
    		void Nhap();
    		char* LayTen();
    		int SoBanhXe();
    		bool CoDongCo();
    		int LuongXangTieuThu();
    		int SoNamDoBen(){ return 10; };
    		int SoNamDuocPhepLuuThong();
    		int SoNguoiDuocChoToiDa();
    		int TaiTrongToiDa();
    		int TocDoToiDa();
    };
    
    
    ///////////////////////////////////////////////
    class CXeTai : public CXeCoDongCo
    {
    	private:
    		int tocdo; // toc do toi da
    		int sobanhxe; // so banh xe
    		int taitrong; // tai trong toi da
    		int luongxang; // luong xang xe tieu thu
    		int sonam; // so nam da bao tri
    
    	public:
    		CXeTai()
    		{
    			tocdo = 70;
    			sobanhxe = 6;
    			taitrong = 1;
    			luongxang = 8;
    			sonam = 0;
    		};
    
    		CXeTai(const int &vantoc, const int &banhxe, const int &khoiluong, const int &xang, const int &nam)
    		{	
    			tocdo = vantoc;
    			sobanhxe = banhxe;
    			taitrong = khoiluong;
    			luongxang = xang;
    			sonam = nam;
    
    			if (tocdo < 70 || tocdo> 120)
    				tocdo = 70;
    			if (sobanhxe < 6 || sobanhxe > 10)
    				sobanhxe = 6;
    			if (taitrong < 1 || taitrong > 5)
    				taitrong = 1;
    			if (luongxang < 8 || luongxang > 20)
    				luongxang = 8;
    			if (sonam < 0 || sonam > 3)
    				sonam = 0;
    		};
    
    		~CXeTai()
    		{
    			return;
    		};
    
    		char* LayTen();
    		int SoBanhXe();
    		bool CoDongCo();
    		int LuongXangTieuThu();
    		int SoNamDoBen() { return 5; };
    		int SoNamDuocPhepLuuThong();
    		int SoNguoiDuocChoToiDa();
    		int TaiTrongToiDa();
    		int TocDoToiDa();
    };
    Và đây là phần cài đặt định nghĩa hàm:
    Code:
    ///////////////       THO SO            ///////////////////
    void CXeThoSo::Xuat()
    {
    	cout <<" Ten: "<< LayTen() <<endl;
    	cout <<" So banh xe: "<< SoBanhXe() <<endl;	
    	cout <<" So nam duoc luu thong: "<< SoNamDuocPhepLuuThong() <<endl;
    	cout <<" So nguoi cho toi da: "<< SoNguoiDuocChoToiDa() <<endl;
    	cout <<" Tai trong toi da: "<< TaiTrongToiDa() <<endl;
    	cout <<" So nam do ben: "<< SoNamDoBen() <<endl;
    	cout <<"\n";
    }
    
    //////////////////////////////////
    char* CXeDap::LayTen()
    {
    	return ("Xe Dap");
    }
    
    int CXeDap::SoBanhXe()
    {
    	return 2;
    }
    
    int CXeDap::SoNguoiDuocChoToiDa()
    {
    	return 2;
    }
    
    int CXeDap::TaiTrongToiDa()
    {
    	return CXeDap::SoNguoiDuocChoToiDa() * 60;
    }
    
    int CXeDap::SoNamDoBen()
    {
    	return 6;
    }
    
    int CXeDap::SoNamDuocPhepLuuThong()
    {
    	return CXeDap::SoNamDoBen() - CXeDap::SoNamSuDung();
    }
    
    bool CXeDap::CoDongCo()
    {
    	return false;
    }
    
    int CXeDap::LuongXangTieuThu()
    {
    	return 0;
    }
    
    
    ////////////////////////////////////
    char* CXichLo::LayTen()
    {
    	return ("Xich Lo");
    }
    
    int CXichLo::SoBanhXe()
    {
    	return 3;
    }
    
    int CXichLo::SoNguoiDuocChoToiDa()
    {
    	return 4;
    }
    
    int CXichLo::TaiTrongToiDa()
    {
    	return CXichLo::SoNguoiDuocChoToiDa() * 60;
    }
    
    int CXichLo::SoNamDoBen()
    {
    	return 8;
    }
    
    int CXichLo::SoNamDuocPhepLuuThong()
    {
    	return CXichLo::SoNamDoBen() - CXichLo::SoNamHoatDong() + CXichLo::SoLanBaoTri();
    }
    
    bool CXichLo::CoDongCo()
    {
    	return false;
    }
    
    int CXichLo::LuongXangTieuThu()
    {
    	return 0;
    }
    
    
    
    ///////////////////          DONG CO     ///////////////////////////////////
    void CXeCoDongCo::Xuat()
    {
    	cout <<" Loai: "<< LayTen() <<endl;
    	cout <<" So banh xe: "<< SoBanhXe() <<endl;
    	//cout <<" So nguoi choi toi da: "<< SoNguoDuocChoToiDa() <<endl;
    	cout <<" Tai trong: "<< TaiTrongToiDa() <<endl;
    	cout <<" Toc do toi da: "<< TocDoToiDa() <<endl;
    	//cout <<" So nam do ben: "<< SoNamDoBen() <<endl;
    	cout <<" So nam duoc luu thong: "<< SoNamDuocPhepLuuThong() <<endl;
    	cout <<"\n";
    }
    
    ///////////////////////////////////
    char* CXeKhach::LayTen()
    {
    	return ("Xe Khach");
    }
    
    int CXeKhach::SoBanhXe()
    {
    	return sobanhxe;
    }
    
    int CXeKhach::SoNguoiDuocChoToiDa()
    {
    	return songuoi;
    }
    
    int CXeKhach::TaiTrongToiDa()
    {
    	return CXeKhach::SoNguoiDuocChoToiDa() * 60;
    }
    
    int CXeKhach::TocDoToiDa()
    {
    	return tocdo * 25 / CXeKhach::SoNguoiDuocChoToiDa();
    }
    
    int CXeKhach::SoNamDuocPhepLuuThong()
    {
    	return CXeKhach::SoNamDoBen() - sonam - (songuoi/15);
    }
    
    ///////////////////////////////////
    char* CXeTai::LayTen()
    {
    	return ("Xe Tai");
    }
    
    int CXeTai::SoBanhXe()
    {
    	return sobanhxe;
    }
    
    int CXeTai::SoNguoiDuocChoToiDa()
    {
    	return CXeTai::TaiTrongToiDa() / 60;
    }
    
    int CXeTai::TaiTrongToiDa()
    {
    	return taitrong;
    }
    
    int CXeTai::TocDoToiDa()
    {
    	return (tocdo * 2) / (taitrong * 5);
    }
    
    int CXeTai::SoNamDuocPhepLuuThong()
    {
    	return CXeTai::SoNamDoBen() - sonam - (taitrong/2);
    }
    Nhìn nó dài, mong các huynh giúp đỡ
    Đã được chỉnh sửa lần cuối bởi toongteeng : 01-06-2010 lúc 10:35 PM. Lý do: bổ sung thêm

  5. #5
    Ngày gia nhập
    05 2010
    Bài viết
    265

    Trích dẫn Nguyên bản được gửi bởi toongteeng Xem bài viết
    Tình hình là đang làm bài tập về đa xạ trong OOP để cải thiện điểm thi cuối kỳ...

    Bài tập về việc quản lý xe.

    Lớp Xe là lớp cơ sở có các thuộc tính thuần ảo.
    Lớp XeThoSo là lớp kế thừa public lớp Xe
    Lớp XeDongCo là lớp kế thừa public lớp Xe

    Trong Lớp XeThoSo thì có lớp XeDap và XeXichLo kế thừa public
    Trong Lớp XeDongCo thì có lớp XeKhach và XeTai kế thừa public


    Mình code toàn bộ thì nó không báo lỗi... nhưng đến hàm main:
    ... Khi gõ: Xe *dsxe = new XeDap;
    dsxe ->Xuat();
    .... thì báo lỗi như thế này :
    unresolved external symbol "public: __thiscall CXeThoSo::CXeThoSo(void)" (??0CXeThoSo@@QAE@XZ)

    Sư huynh nào nhiệt tình giúp đỡ với.... Cảm ơn
    Cậu mới khai báo mà chưa định nghĩa constructor CXeThoSo().

  6. #6
    Ngày gia nhập
    09 2009
    Bài viết
    9

    Mặc định Bị Lỗi Khi CODE đa xạ

    uhm.. đúng rồi, cảm ơn huynh nhiều lắm...

    Nhưng mà huynh cho hỏi thêm chút nữa... Theo như bài code mình đã post ở trên...

    Nếu có thêm lớp CQuanLyXe với private: CXe *dsXe[100];

    thì ở hàm main() khai báo :
    Code:
    void main()
    {
    	CQuanLyXe *qlXe;
    	
    	qlXe->dsXe[0] = new CXeDap(2);
    
    	gech();
    }
    với lỗi là : error C2248: 'dsXe' : cannot access private member declared in class 'CQuanLyXe'


    Như vậy thì ... làm cách nào để truy xuất được cái dsXe đó vậy huynh...

  7. #7
    Ngày gia nhập
    04 2010
    Nơi ở
    Thâm sơn cùng cốc
    Bài viết
    825

    Chuyển khai báo của mảng dsXe sang dạng public trong khai báo lớp CQuanLyXe

  8. #8
    Ngày gia nhập
    05 2010
    Bài viết
    265

    Trích dẫn Nguyên bản được gửi bởi toongteeng Xem bài viết
    uhm.. đúng rồi, cảm ơn huynh nhiều lắm...

    Nhưng mà huynh cho hỏi thêm chút nữa... Theo như bài code mình đã post ở trên...

    Nếu có thêm lớp CQuanLyXe với private: CXe *dsXe[100];

    thì ở hàm main() khai báo :
    Code:
    void main()
    {
    	CQuanLyXe *qlXe;
    	
    	qlXe->dsXe[0] = new CXeDap(2);
    
    	gech();
    }
    với lỗi là : error C2248: 'dsXe' : cannot access private member declared in class 'CQuanLyXe'

    Như vậy thì ... làm cách nào để truy xuất được cái dsXe đó vậy huynh...
    Cậu chưa thuộc bài vỡ lòng về class rồi. Chỉ có các member functions hoặc friend functions mới truy cập được private. Hãy sử dụng các constructor hoặc một hàm nào đó tương tự.

  9. #9
    Ngày gia nhập
    06 2009
    Bài viết
    19

    Trích dẫn Nguyên bản được gửi bởi toongteeng Xem bài viết
    uhm.. đúng rồi, cảm ơn huynh nhiều lắm...

    Nhưng mà huynh cho hỏi thêm chút nữa... Theo như bài code mình đã post ở trên...

    Nếu có thêm lớp CQuanLyXe với private: CXe *dsXe[100];

    thì ở hàm main() khai báo :
    Code:
    void main()
    {
    	CQuanLyXe *qlXe;
    	
    	qlXe->dsXe[0] = new CXeDap(2);
    
    	gech();
    }
    với lỗi là : error C2248: 'dsXe' : cannot access private member declared in class 'CQuanLyXe'


    Như vậy thì ... làm cách nào để truy xuất được cái dsXe đó vậy huynh...
    lơ chi rúi chỉ luôn đi huynh đệ củng thác mắc

  10. #10
    Ngày gia nhập
    06 2009
    Bài viết
    19

    nếu khai bao nhu vậy :
    CQuanLyXe::CQuanLyXe()
    {
    dsXe[0]=new CXeDap;
    soxe=1;
    }
    rùi o
    Code:
    void main()
    {
    	CQuanLyXe* qlXe;
    	qlXe->dsXe[0]->xuat();
    
    }
    lổi error C2248: 'dsXe' : cannot access protected member declared in class 'CQuanLyXe'
    hong hiuể bị sao ?

Các đề tài tương tự

  1. Tại sao lại bỏ Store Proceduce nếu code theo hướng Code First trong MVC3
    Gửi bởi rogerminh2401 trong diễn đàn Thắc mắc lập trình ASP.NET
    Trả lời: 5
    Bài viết cuối: 02-11-2012, 08:22 PM
  2. Trả lời: 5
    Bài viết cuối: 27-04-2012, 07:51 PM
  3. compiler Warning: Unreachable code và chạy sai trong khi code đúng. Vì sao?
    Gửi bởi lovemoney trong diễn đàn Thảo luận, góp ý code C/C++ của bạn
    Trả lời: 19
    Bài viết cuối: 19-01-2012, 10:02 PM
  4. Bài tập C++ Nhập code và name sv vào in ra thì name in đúng nhưng code thì in ra cả 2 code lẫn name
    Gửi bởi spacy0212 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 2
    Bài viết cuối: 27-09-2011, 08:47 AM
  5. Code quản lý sinh viên bằng danh sách lối vòng. Giúp mình thay đổi code kế thừa?
    Gửi bởi caocanha trong diễn đàn Thảo luận, góp ý code C/C++ của bạn
    Trả lời: 6
    Bài viết cuối: 04-05-2009, 03:39 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn