Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Kết quả 1 đến 5 của 5

Chủ đề: Lỗi kế thừa

  1. #1
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    Lỗi kế thừa

    Mình có 1 cái bài tập rất lớn, nếu nói trên này thì dài quá, mình chỉ up phần bị lỗi lên và nhờ các bạn sửa giúp.

    Đại loại về ý nghĩa của cái phần này là:
    tạo ra 4 class sao cho class kythuat, class quanli kế thừa class congnhan, class giamdoc kế thừa class kythuat và class quanli.
    Nhập dữ liệu vào n quản lí, n1 kỹ thuật và n2 giám đốc (tất cả đều là công nhân trong 1 công ti)

    (Không biết các bạn có hiểu không nữa ~ mình chỉ giải thích được có bấy nhiều thôi.)

    các thuộc tính của các ;project.obj : error LNK2001: unresolved external symbol "public: virtual void __thiscall congnhan::input(void)" (?input@congnhan@@UAEXXZ)
    1>E:\\project\Debug\project.exe : fatal error LNK1120: 1 unresolved externals[/CODE]còn đây là code:

    Mã:
    #include <iostream>#include <conio.h>  class congnhan {    char ht[50];    char dc[50];    int luong;public:    congnhan() {        ht;        dc;        luong;    }    ~congnhan() {    }    void htdc(char ht_[50],char dc_[50]);    virtual void input();    void Luong(int luong_);    virtual void tinhluong(int Lcb,int sngay);};class quanli : public congnhan {    int pc;public:    quanli(){        pc;    }    ~quanli() {    }    virtual void input();    void tinhluong(int Lcb,int sngay);    void phucap(int _pc);};class kythuat : public congnhan {    char nganh[50];public:    kythuat(){        nganh;    }    ~kythuat() {    }    void input();    void Nganh(char _nganh[50]);};class giamdoc : public quanli, public kythuat {    int sdt;    char tencn[50];public:    giamdoc(){        sdt;        tencn[50];    }    ~giamdoc() {    }    void input();};void congnhan::Luong(int luong_) {    this->luong = luong_;}void quanli::phucap(int _pc) {    this->pc = _pc;}void kythuat::Nganh(char _nganh[50]) {    for (int i = 0; i < 50; i++)        this->nganh[i] = _nganh[i]; }void congnhan::htdc(char ht_[50],char dc_[50]) {    for (int i = 0; i < 50; i++) {        this->ht[i] = ht_[i];        this->dc[i] = dc_[i];    }}void quanli::input() {    std::cout << "Nhap vao phu cap: ";    std::cin >> this->pc;}void kythuat::input() {    std::cout << "Nhap vao nganh: ";    std::cin.ignore();    std::cin.getline(this->nganh,50);}void giamdoc::input() {    int pc_;    char nganh_[50];    std::cout << "Nhap vao so dien thoai: ";    std::cin >> this->sdt;    std::cout << "Nhap vao ten chi nhanh: ";    std::cin.ignore();    std::cin.getline(this->tencn,50);    std::cout << "Nhap vao phu cap: ";    std::cin >> pc_;    phucap(pc_);    std::cout << "Nhap vao nganh: ";    std::cin.ignore();    std::cin.getline(nganh_,50);    Nganh(nganh_);}void congnhan::tinhluong(int Lcb,int sngay) {    int luongc;    luongc = Lcb * sngay/30;    this->Luong(luongc);}void quanli::tinhluong(int Lcb,int sngay) {    int luongc;    luongc = Lcb * sngay/30 + this->pc;    this->Luong(luongc);}void nhap(congnhan *cn, int n) {    char hoten[50],diachi[50];    int luongcb,songay;    std::cout << "Nhap vao luong co ban: ";    std::cin >> luongcb;    for (int i = 1; i <= n; i++) {        std::cout << "Nguoi thu " << i << std::endl;        std::cout << "Nhap ho ten: ";        std::cin.ignore();        std::cin.getline(hoten,50);        std::cout << "Nhap dia chi: ";        std::cin.ignore();        std::cin.getline(diachi,50);        cn[i].htdc(hoten,diachi);        cn[i].input();        ax:std::cout << "Nhap vao so ngay lam trong thang ( <= 30): ";        std::cin >> songay;        if (songay < 0 || songay > 30) {            std::cout << "So ngay khong the < 0 hoac > 30
    ";            goto ax;        }        cn[i].tinhluong(luongcb,songay);    }}  int main() {    int n,n1,n2;    std::cout << "Chao mung den voi chuong trinh quan li cong ti!
    -------------------------------------------------------------
    ";    std::cout << "Nhap thong tin.
    ";    a:std::cout << "Muon nhap bao nhieu quan li? ";    std::cin >> n;    std::cout << "Muon nhap bao nhieu ky thuat? ";    std::cin >> n1;    std::cout << "Muon nhap bao nhieu giam doc chi nhanh? ";    std::cin >> n2;    if (n1 < 0 || n2 < 0 || n < 0) {        std::cout << "So nguoi khong the < 0, vui long nhap lai.
    ";        goto a;    }    congnhan *ql = new quanli[n+1];    congnhan *kt = new kythuat[n1+1];    congnhan *gd_ = new quanli[n2+1];    quanli *gd = new giamdoc[n2+1];    gd_ = gd;    std::cout << "Nhap quan li
    ";    nhap(ql,n);    std::cout << "Nhap ky thuat
    ";    nhap(kt,n1);    std::cout << "Nhap giam doc chi nhanh
    ";    nhap(gd,n2);}
    Ai giúp được mình xin cảm ơn![IMG]images/smilies/biggrin.png[/IMG]

  2. #2
    Đọc qua cái mô tả là thấy ba chấm rồi.

  3. #3
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi prog10
    Đọc qua cái mô tả là thấy ba chấm rồi.
    vậy bạn giúp mình được không? code mình viết hơi dài xí, do mới học, bạn thông cảm nhé!

  4. #4
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Lỗi sai ở trên là do hàm virtual void input() trong class congnhan. Bạn nên đọc kĩ về từ khóa virtual trong C++. Bản chất của một hàm có và không có virtual là: late binding và early binding (Hàm có virtual sẽ late binding). Đi vào vấn đề chính luôn: Trong đoạn code trên bạn thiếu định nghĩa hàm
    Mã:
    void congnhan::input(){}

  5. #5
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi Titi_bkpro
    Lỗi sai ở trên là do hàm virtual void input() trong class congnhan. Bạn nên đọc kĩ về từ khóa virtual trong C++. Bản chất của một hàm có và không có virtual là: late binding và early binding (Hàm có virtual sẽ late binding). Đi vào vấn đề chính luôn: Trong đoạn code trên bạn thiếu định nghĩa hàm
    Mã:
    void congnhan::input(){}
    Mình sửa rồi nhưng mà khi chạy nó sinh ra lỗi runtime. Bạn chỉ cho mình cách khắc phục lỗi được không?

 

 

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •