Từ 1 tới 4 trên tổng số 4 kết quả

Đề tài: Lỗi no copy constructor available or copy constructor is declared 'explicit'

  1. #1
    Ngày gia nhập
    04 2008
    Bài viết
    27

    Mặc định Lỗi no copy constructor available or copy constructor is declared 'explicit'

    PHP Code:
    #include <string>
    #include <iostream>
    using namespace std;

    class 
    CStaff {

    private:

        
    char Code11 ];
        
    char Name41 ];
        
    unsigned  Salary;

    public:
        
        
    // Constructors
        
    CStaffvoid ) {

            
    // Empty
        
    }

        
    CStaffcharcodecharnameunsigned salary ) {

            
    strcpyCodecode );
            
    strcpyNamename );

            
    Salary      salary;

        }

        
    CStaff( const CStaffstaff ) {

            
    strcpyCodestaff.Code );
            
    strcpyNamestaff.Name );

            
    Salary      staff.Salary;

        }
        
        
    // Destructor
        
    ~CStaffvoid ) {

            
    // Empty
        
    }

        
    charGetCode() {

            return 
    Code;

        }

        
    charGetName() {

            return 
    Name;

        }

        
    unsigned GetSalary() {
        
            return 
    Salary;

        }

        
    void SetCodecharcode ) {

            
    strcpyCodecode );

        }

        
    void SetNamecharname ) {

            
    strcpyNamename );

        }

        
    void SetSalaryunsigned salary ) {

            
    Salary salary;

        }

        
    virtual bool operator == ( const CStaffstaff ) {
        
            return ( 
    strcmpCodestaff.Code ) && strcmpNamestaff.Name ) && Salary == staff.Salary );

        }

        
    virtual void Display() {
            
            
    cout << "Code   : " << Code << endl;
            
    cout << "Name   : " << Name << endl;
            
    cout << "Salary : " << Salary << endl;

        }

    };

    /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */

    class COfficeStaff virtual public CStaff {

    private:

        
    unsigned WorkingLife;    // month working for company

    public:
        
        
    // Constructors
        
    COfficeStaffvoid ) {

            
    // Empty
        
    }

        
    COfficeStaffcharcodecharnameunsigned salaryunsigned workingLife )
            : 
    CStaffcodenamesalary ) {

            
    WorkingLife workingLife;
        
        }

        
    COfficeStaffCOfficeStaffofficeStaff 
            : 
    CStaffofficeStaff.GetCode(), officeStaff.GetName(), officeStaff.GetSalary() ) {

            
    WorkingLife officeStaff.WorkingLife;

        }
        
        
    // Destructor
        
    ~COfficeStaffvoid ) {

            
    // Empty
        
    }

        
    unsigned GetWorkingLife() {

            return 
    WorkingLife;

        }    

        
    void SetWorkingLifeunsigned workingLife ) {
        
            
    WorkingLife workingLife;

        }

        
    double Bonus() {

            if ( 
    WorkingLife )
                return 
    100000;
            else
                return 
    200000 GetSalary() * 0,WorkingLife/6;

        }
        
        
    //COfficeStaff& operator = ( COfficeStaff& officeStaff ) {
        //
        //    COfficeStaff _officeStaff;
        //    strcpy( _officeStaff.GetCode(), officeStaff.GetCode() );
        //    strcpy( _officeStaff.GetName(), officeStaff.GetName() );
        //    _officeStaff.SetSalary( officeStaff.GetSalary() );
        //    _officeStaff.WorkingLife = officeStaff.WorkingLife;

        //    return _officeStaff;

        //}

        
    bool operator == ( COfficeStaffofficeStaff ) {

            return (    
    strcmpGetCode(), officeStaff.GetCode() ) && 
                        
    strcmpGetName(), officeStaff.GetName() ) && 
                        
    GetSalary() == officeStaff.GetSalary()   );

        }
        
        
    virtual void Display() {
            
            
    CStaff::Display();
            
    cout << "Working Life : " << WorkingLife << endl;

        }

    };

    /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */

    class CSalesPersonal virtual public CStaff {

    private:

        
    float CoefficientBonus;

    public:
        
        
    // Constructors
        
    CSalesPersonalvoid ) {

            
    // Empty
        
    }

        
    CSalesPersonalcharcodecharnameunsigned salaryfloat coefficientBonus )
            : 
    CStaffcodenamesalary ) {

            
    CoefficientBonus coefficientBonus;
        
        }

        
    CSalesPersonalCSalesPersonalsalesPersonal 
            : 
    CStaffsalesPersonal.GetCode(), salesPersonal.GetName(), salesPersonal.GetSalary() ) {

                
    CoefficientBonus salesPersonal.CoefficientBonus;

        }
        
        
    // Destructor
        
    ~CSalesPersonalvoid ) {

            
    // Empty
        
    }

        
    float GetCoefficientBonus() {

            return 
    CoefficientBonus;

        }    

        
    void SetCoefficientBonusfloat coefficientBonus ) {
        
            
    CoefficientBonus coefficientBonus;

        }

        
    double Bonus() {

            return 
    150000 CoefficientBonus;

        }

        
    bool operator == ( CSalesPersonalsalesPersonal ) {

            return (    
    strcmpGetCode(), salesPersonal.GetCode() ) && 
                        
    strcmpGetName(), salesPersonal.GetName() ) && 
                        
    GetSalary() == salesPersonal.GetSalary()   );

        }
        
        
    virtual void Display() {
            
            
    cout << "Coefficient bonus : " << CoefficientBonus << endl;

        }

    };

    /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */

    class CManufactureStaff virtual public CStaff {

    private:

        
    unsigned ProductSell;    // total product selled begin beginning of year

    public:
        
        
    // Constructors
        
    CManufactureStaffvoid ) {

            
    // Empty
        
    }

        
    CManufactureStaffcharcodecharnameunsigned salaryunsigned productSell )
            : 
    CStaffcodenamesalary ) {

            
    ProductSell productSell;
        
        }

        
    CManufactureStaffCManufactureStaffmanufacturer 
            : 
    CStaffmanufacturer.GetCode(), manufacturer.GetName(), manufacturer.GetSalary() ) {

                
    ProductSell manufacturer.ProductSell;

        }
        
        
    // Destructor
        
    ~CManufactureStaffvoid ) {

            
    // Empty
        
    }

        
    unsigned GetProductSell() {

            return 
    ProductSell;

        }    

        
    void SetProductSellunsigned productSell ) {
        
            
    ProductSell productSell;

        }

        
    double Bonus() {

            return 
    20000 ProductSell;

        }

        
    bool operator == ( CManufactureStaffmanufacturer ) {

            return (    
    strcmpGetCode(), manufacturer.GetCode() ) && 
                        
    strcmpGetName(), manufacturer.GetName() ) && 
                        
    GetSalary() == manufacturer.GetSalary()   );

        }

        
    virtual void Display() {
            
            
    cout << "Product sellout : " << ProductSell << endl;

        }

    };

    /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */

    class CStaffNode {
        
    public:

        
    CStaffstaff;
        
    CStaffNodenext;

        
    // Constructors
        
    CStaffNode( const CStaff_staffCStaffNodeNULL ) {
        
            
    staff = new CStaff_staff );
            
    next  p;

        }

        
    CStaffNode( const COfficeStaff_officeStaffCStaffNodeNULL ) {
        
            
    staff = new COfficeStaff_officeStaff );    // bao loi o cho nay
            
    next  p;

        }

        
    /*CStaffNode( const CSalesPersonal& _salesPersonal, CStaffNode* p = NULL ) {
        
            staff = _salesPersonal;
            next  = p;

        }

        CStaffNode( const CManufactureStaff& _manufactureStaff, CStaffNode* p = NULL ) {
        
            staff = _manufactureStaff;
            next  = p;

        }*/

    };

    class 
    CStaffNodeList {
        
    private:

        
    CStaffNodehead, * tail;
        
    unsigned total;

    public:
        
        
    // Constructor
        
    CStaffNodeList() {
            
            
    head tail NULL;
            
    total 0;

        }
        
        
    // Destructor
        
    ~CStaffNodeListvoid ) {
            
            for( 
    CStaffNodep; !IsEmpty(); ) {        
                
    head->next;
                
    delete head;
                
    head p;
            }

        }

        
    bool IsEmpty() {
            
            return 
    head == NULL;

        }

        
    void AddToHead( const CStaffstaff ) {
            
            
    head = new CStaffNodestaffhead );
            if ( 
    tail == NULL )
                
    tail head;

            
    total ++;

        }
        
        
    void AddToHead( const COfficeStaffofficeStaff ) {
            
            
    head = new CStaffNodeofficeStaffhead );
            if ( 
    NULL == tail )
                
    tail head;

            
    total ++;

        }

        
    void AddToHead( const CSalesPersonalsalesPersonal ) {
            
            
    head = new CStaffNodesalesPersonalhead );
            if ( 
    NULL == tail )
                
    tail head;

            
    total ++;

        }

        
    void AddToHead( const CManufactureStaffmanufactureStaff ) {
            
            
    head = new CStaffNodemanufactureStaffhead );
            if ( 
    NULL == tail )
                
    tail head;

            
    total ++;

        }

        
    void AddToTail( const CStaffstaff ) {
        
            if ( 
    tail ) {
                
    tail->next = new CStaffNodestaff );
                
    tail tail->next;
            }
            else
                
    head tail = new CStaffNodestaff );
            
            
    total ++;

        }

        
    void DeleteNodeCStaffstaff ) {
        
            if ( 
    head ) {    // If list is not empty
                
    if ( head == tail && staff == *(head->staff) ) {
                
    // If list only have 1 element
                    
    delete head;
                    
    head tail NULL;
                    
    total --;
                }
                else {    
    // If list have more than 1 element
                    
    if ( staff == *(head->staff) ) {
                        
    CStaffNodetmp head->next;
                        
    head head->next;
                        
    delete tmp;    // delete old head
                        
    total --;
                    }
                    else {    
    // If list have more than 1 element
                        
    CStaffNodepred, * tmp;
                        
    // Search node needs delete
                        
    for( pred headtmp head->next;
                            
    tmp != NULL && !( *tmp->staff == staff );
                            
    pred pred->nexttmp tmp->next );
                        
    // Delete node
                        
    if ( tmp ) {
                            
    pred->next tmp->next;
                            if ( 
    tmp == tail )
                                
    tail pred;
                            
    delete tmp;
                        }
                        
    total --;
                    }
                }
            }
        }
        
        
    void Display() {
        
            
    CStaffNodehead;
            while( 
    ) {
                
    p->staff->Display();
                
    p->next;
            }
        }
        
    unsigned GetTotal() {
            
            return 
    total;

        }

    };

    /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */

    int main() {
        
        
    CStaff _staff"12345""David"10000 );
        
    COfficeStaff officeStaff"123456""Ronaldo"10000);


        
    CStaffNodeListstaff = new CStaffNodeList;
        
    staff->AddToHead_staff );
        
    staff->AddToHeadofficeStaff );
        
        
    staff->Display();

        return 
    0;


    Nó báo lỗi ở dòng này
    staff = new COfficeStaff( _officeStaff );
    nhưng em không biết tại sao lại như vậy ?
    Đã được chỉnh sửa lần cuối bởi tun_tun : 14-12-2008 lúc 11:29 AM.

  2. #2
    Ngày gia nhập
    12 2006
    Nơi ở
    US
    Bài viết
    1,917

    - Lần sau post luôn lỗi compiler lên đây nhé cậu
    - Compiler tui nó la làng :
    Code:
    /main.cpp||In member function ‘double COfficeStaff::Bonus()’:|
    /main.cpp|152|warning: right-hand operand of comma has no effect|
    /main.cpp||In constructor ‘CStaffNode::CStaffNode(const COfficeStaff&, CStaffNode*)’:|
    /main.cpp|344|error: no matching function for call to ‘COfficeStaff::COfficeStaff(const COfficeStaff&)’|
    /main.cpp|122|note: candidates are: COfficeStaff::COfficeStaff(COfficeStaff&)|
    /main.cpp|115|note:                 COfficeStaff::COfficeStaff(char*, char*, unsigned int, unsigned int)|
    /main.cpp|110|note:                 COfficeStaff::COfficeStaff()|
    /main.cpp||In function ‘int main()’:|
    /main.cpp|507|warning: deprecated conversion from string constant to ‘char*’|
    /main.cpp|507|warning: deprecated conversion from string constant to ‘char*’|
    /main.cpp|508|warning: deprecated conversion from string constant to ‘char*’|
    /main.cpp|508|warning: deprecated conversion from string constant to ‘char*’|
    ||=== Build finished: 1 errors, 5 warnings ===|
    vì cậu làm gì có constructor nào nhận vào 1 "const COfficeStaff& _officeStaff" ? Coi lại xem :|)

  3. #3
    Ngày gia nhập
    09 2008
    Bài viết
    28

    Thử lấy thằng "const" ra khỏi hàm CStaffNode xem sao.

    Code:
        CStaffNode( COfficeStaff& _officeStaff, CStaffNode* p = NULL ) {
        
            staff = new COfficeStaff( _officeStaff );    // bao loi o cho nay
            next  = p;
    
        }

  4. #4
    Ngày gia nhập
    01 2012
    Nơi ở
    hà nôi 2
    Bài viết
    59

    /main.cpp|507|warning: deprecated conversion from string constant to ‘char*’|
    hàm strcpy() của bạn sai này chỉ có copy hai chuỗi cho nhau thôi chứ làm gì copy chuỗi vào con trỏ
    trừ khi con trỏ chứa địa chỉ đầu tiên(hằng con trỏ) của xâu kí tự thì được
    I'm still a chicken
    rất vui khi được làm quen với mọi người ^_^ http://www.facebook.com/chung.v.nguyen.14

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

  1. Tìm hiểu khái niệm về hàm Copy Constructor
    Gửi bởi vuongngocnam trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 12
    Bài viết cuối: 26-11-2014, 02:10 PM
  2. Xin hỏi về Copy Constructor
    Gửi bởi xxria trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 4
    Bài viết cuối: 08-08-2009, 07:58 PM
  3. Hỏi về copy constructor?
    Gửi bởi xxria trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 1
    Bài viết cuối: 08-08-2009, 05:51 PM
  4. Khó hiểu quá ( copy constructor )
    Gửi bởi phanphuocml trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 4
    Bài viết cuối: 22-04-2008, 06:30 PM
  5. [ Solved ]Hỏi 1 tí về copy constructor
    Gửi bởi ktwiz trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 1
    Bài viết cuối: 21-03-2008, 01:26 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