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

Đề tài: [C++] ai bít sửa giùm lỗi này với !!!!!

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

    Wink [C++] ai bít sửa giùm lỗi này với !!!!!

    mình viết chương trình với class như sau :
    PHP Code:
    class BigInt{
        
    // xau cac con so, vi du so 1234567890 thi xau la 0987654321
        
    char *value;
        
    // dau cua so : 0 la duong , 1 la am
        
    char sign;
        public:
            
    // cac ham thiet lap cho so lon
            
    BigInt();
            
    BigInt(long);
            
    BigInt(char*);
            
    BigInt(const BigInt&);
            
    // dinh nghia toan tu gan vi dang su dung du lieu dong
            
    BigIntoperator = (const BigInt&);
            
    // cac toan tu cong tru nhan chia
            
    friend BigInt operator + (const BigInt&, const BigInt&);
            
    friend BigInt operator - (const BigInt&, const BigInt&);
            
    friend BigInt operator * (const BigInt&, const BigInt&);
            
    friend BigInt operator / (const BigInt&, const BigInt&);
            
    friend BigInt operator % (const BigInt&, const BigInt&);
            
    // cac toan tu so sanh
            
    friend int operator == (const BigInt&, const BigInt&);
            
    friend int operator != (const BigInt&, const BigInt&);
            
    friend int operator < (const BigInt&, const BigInt&);
            
    friend int operator <= (const BigInt&, const BigInt&);
            
    friend int operator > (const BigInt&, const BigInt&);
            
    friend int operator >= (const BigInt&, const BigInt&);
            
    // toan tu dao dau va cac toan tu mo rong
            
    BigInt operator - () const;
            
    BigIntoperator += (const BigInt&);
            
    BigIntoperator -= (const BigInt&);
            
    BigIntoperator *= (const BigInt&);
            
    BigIntoperator /= (const BigInt&);
            
    BigIntoperator %= (const BigInt&);
            
    // lay gia tri tuyet doi
            
    BigInt abs();
            
    // toan tu nhap xuat
            
    friend ostreamoperator << (ostream&, const BigInt&);
            
    friend istreamoperator << (istream&,BigInt&);
    //        ~BigInt();
        
    private:
            
    // cac phuong thu ho tro viec cai dat lop
            
    BigInt(char* , char);
            
    // cong tru nhan va so sanh hai xau bieu dien so lon
            
    static charplus(char*, char*);
            static 
    charminus(char*, char*);
            static 
    int compare(char*, char*);
            static 
    charmulti(char*, char*);
    }; 
    không hiểu tại sao khi linking thì hiện lỗi này :
    Code:
    Undefined symbol bigint::bigint(char near*,char) in module SOLON.CPP
    các pro giúp với nhá . thx

    ------------
    Nhắc nhở: vi phạm nội quy tiêu đề bài viết. ht961711
    Đã được chỉnh sửa lần cuối bởi Forlorn_hope : 10-12-2007 lúc 08:23 PM.

  2. #2
    Ngày gia nhập
    10 2007
    Nơi ở
    HCMUNS
    Bài viết
    459

    Undefined symbol bigint::bigint(char near*,char) in module SOLON.CPP
    Lỗi nói rõ vậy mà. Method đó (constructor) chưa được define.
    Keep moving forward!

    ... Retired ...

  3. #3
    Ngày gia nhập
    04 2007
    Bài viết
    13

    chương trình hoàn chỉnh đây pác xem rùi sửa giúp em nhá
    PHP Code:
    // Bai toan voi so lon trong C++

    #include <iostream.h>
    #include <string.h>
    #include <conio.h>
    #include <stdio.h>
    #include <ctype.h>
    #include <stdlib.h>

    class BigInt{
        
    // xau cac con so, vi du so 1234567890 thi xau la 0987654321
        
    char *value;
        
    // dau cua so : 0 la duong , 1 la am
        
    char sign;
        public:
            
    // cac ham thiet lap cho so lon
            
    BigInt();
            
    BigInt(long);
            
    BigInt(char*);
            
    BigInt(const BigInt&);
            
    // dinh nghia toan tu gan vi dang su dung du lieu dong
            
    BigIntoperator = (const BigInt&);
            
    // cac toan tu cong tru nhan chia
            
    friend BigInt operator + (const BigInt&, const BigInt&);
            
    friend BigInt operator - (const BigInt&, const BigInt&);
            
    friend BigInt operator * (const BigInt&, const BigInt&);
            
    friend BigInt operator / (const BigInt&, const BigInt&);
            
    friend BigInt operator % (const BigInt&, const BigInt&);
            
    // cac toan tu so sanh
            
    friend int operator == (const BigInt&, const BigInt&);
            
    friend int operator != (const BigInt&, const BigInt&);
            
    friend int operator < (const BigInt&, const BigInt&);
            
    friend int operator <= (const BigInt&, const BigInt&);
            
    friend int operator > (const BigInt&, const BigInt&);
            
    friend int operator >= (const BigInt&, const BigInt&);
            
    // toan tu dao dau va cac toan tu mo rong
            
    BigInt operator - () const;
            
    BigIntoperator += (const BigInt&);
            
    BigIntoperator -= (const BigInt&);
            
    BigIntoperator *= (const BigInt&);
            
    BigIntoperator /= (const BigInt&);
            
    BigIntoperator %= (const BigInt&);
            
    // lay gia tri tuyet doi
            
    BigInt abs();
            
    // toan tu nhap xuat
            
    friend ostreamoperator << (ostream&, const BigInt&);
            
    friend istreamoperator << (istream&,BigInt&);
            ~
    BigInt();
        private:
            
    // cac phuong thu ho tro viec cai dat lop
            
    BigInt(char* , char);
            
    // cong tru nhan va so sanh hai xau bieu dien so lon
            
    static charplus(char*, char*);
            static 
    charminus(char*, char*);
            static 
    int compare(char*, char*);
            static 
    charmulti(char*, char*);
    };

    //===================Phan thi hanh========================
    // ham thiet lap gia tri khoi tao bang 0
    BigInt::BigInt(){
        
    sign=0;
        
    value=strdup("0");
    }

    // ham thiet lap khoi tao gia tri bang so long
    BigInt::BigInt(long l){
        
    char tmp[80];
        
    int i=0;
        
    sign =(l>=0)?0:1;
        if(
    l==0){
            
    value=strdup("0");
            return;
        }
        if(
    l<0l=-1;
        
    //lay cac con so tu hang don vi cho den hang cao nhat de bieu dien vao xau
        
    while(l){
            
    tmp[i++]=char(l%10)+'0';
            
    l=l/10;
        }
        
    // ket thuc xau la mot so 0
        
    tmp[i]=0;
        
    value=strdup(tmp);
    }

    // ham thiet lap khoi tao moi so lon voi xau bieu dien cua so do
    BigInt::BigInt(chars){
        
    value=new char[strlen(s)+1];
        
    int n=strlen(s)-1;
        
    int i=0;
        
    sign  0;
        
    // dao nguoc lai xau bieu dien
        
    do{
            switch(
    s[n]){
                case 
    '-'sign =1;
                case 
    ' ': break;
                default: 
    value[i++]=s[n];
            }
            
    n--;
        } while (
    n>=0);
        
    value[i]=0;
    }

    //ham thiet lap sao chep
    BigInt::BigInt(const BigIntbi){
        
    sign bi.sign;
        
    value strdup(bi.value);
    }

    //toan tu gan
    BigIntBigInt::operator = (const BigIntbi){
        
    delete value;
        
    sign bi.sign;
        
    value strdup(bi.value);
        return *
    this;
    }

    // cong hai so lon
    BigInt operator + (const BigIntbi1,const BigIntbi2){
        
    // khac dau
        
    if (bi1.sign != bi2.sign){
            
    int cmp BigInt::compare(bi1.value,bi2.value);
            if (
    cmp==0) return BigInt("0");
            if (
    cmp>0) return BigInt(BigInt::minus(bi1.value,bi2.value),bi1.sign);
            else return 
    BigInt(BigInt::minus(bi2.value,bi1.value),bi2.sign);
        }
        
    // cung dau
        
    return BigInt(BigInt::plus(bi1.value,bi2.value),bi1.sign);
    }
    BigInt operator - (const BigIntbi1, const BigIntbi2){
        return 
    bi1+(-bi2);
    }
    BigInt operator * (const BigIntbi1,const BigIntbi2){
        return 
    BigInt(BigInt::multi(bi1.value,bi2.value),bi1.sign!=bi2.sign?1:0);    
    }
    BigInt operator / (const BigIntx, const BigInty){
        if (
    x==0l) return BigInt(0l);
        
    // quy cac phep chia voi so am ve phep chia voi so duong
        
    if(x<0l && y<0l) return ((-x)/(-y));
        if(
    x>0l && y>0l){
            if(
    x%(-y)==0l) return -(x/(-y));
            else return -(
    x/(-y)+1);
        }
        if(
    x<0l&&y>0l){
            if((-
    x)%y==0l) return ((-x)/y);
            else return -((-
    x)/y+1);
        }
        
    // trung hop x>0, y>0 thuc hien phep chia hai so duong
        
    if(x<y) return BigInt(0l);
        
    BigInt haimu_n(1l);
        
    BigInt y2mu_n(y);
        
    BigInt div(0l);
        while(
    x>=y2mu_n*2){
            
    haimu_n*=2;
            
    y2mu_n*=2;
        }
        
    div += haimu_n+(x-y2mu_n)/y;
        return 
    div;
    }
    BigInt operator % (const BigIntx, const BigInty){
        
    // x%y = x- (x/y)*y
        
    return (x-(x/y)*y);
    }

    // cac toan tu so sanh
    int operator == (const BigIntbi1,const BigIntbi2){
        return (
    bi1.sign==bi2.sign && BigInt::compare(bi1.value,bi2.value)==0);
    }
    int operator != (const BigIntbi1,const BigIntbi2){
        return !(
    bi1==bi2);
    }
    int operator < (const BigIntbi1,const BigIntbi2){
        if (
    bi1.sign) return bi2.sign?BigInt::compare(bi1.value,bi2.value)>0:1;
        return 
    bi2.sign?0:BigInt::compare(bi1.value,bi2.value)<0;
    }
    int operator <= (const BigIntbi1,const BigIntbi2){
        return (
    bi1==bi2 || bi1<bi2);
    }
    int operator > (const BigIntbi1,const BigIntbi2){
        if (
    bi1.sign) return bi2.sign?BigInt::compare(bi1.value,bi2.value)<0:0;
        return 
    bi2.sign?1:BigInt::compare(bi1.value,bi2.value)>0;
    }
    int operator >= (const BigIntbi1,const BigIntbi2){
        return (
    bi1==bi2 || bi1>bi2);
    }
    BigInt BigInt::operator - () const {
        return 
    BigInt(strdup(value),!sign);
    }
    BigIntBigInt::operator += (const BigIntbi){
        return (*
    this = *this +bi);
    }
    BigIntBigInt::operator -= (const BigIntbi){
        return (*
    this = *this -bi);
    }
    BigIntBigInt::operator *= (const BigIntbi){
        return (*
    this = *this bi);
    }
    BigIntBigInt::operator /= (const BigIntbi){
        return (*
    this = *this bi);
    }
    BigIntBigInt::operator %= (const BigIntbi){
        return (*
    this = *this bi);
    }
    BigInt BigInt::abs(){
        if(
    sign) return BigInt(value,!sign);
        return *
    this;
    }
    ostreamoperator << (ostreamout,const BigIntbi){
        
    // du lieu hien thi la chuoi nguoc choi bieu dien so
        
    if(bi.sign)out<<'-';
        for(
    int i=strlen(bi.value)-1;i>=0;i--) out<<bi.value[i];
        return 
    out;
    }
    istreamoperator >> (istreaminBigIntbi){
        
    // thuc hien quet mot so
        
    char tmp[1000];
        
    char c;
        
    int i=0;
        
    in >> c;
        switch(
    c){
            case 
    '-':tmp[i++]=c;
            case 
    '+':in.get(c);
        }
        if(!
    isdigit(c)){
            
    bi=BigInt(0l);
            return 
    in;
        }
        
    // diem ket thuc cua viec quet la mot ki tu khac so
        
    do{
            
    tmp[i++]=c;
            
    in.get(c);
        } while (
    isdigit(c));
        
    tmp[i]=0;
        
    bi=BigInt(tmp);
        return 
    in;
    }

    charBigInt::plus(charv1,charv2){
        
    int n1=strlen(v1);
        
    int n2=strlen(v2);
        
    //cap phat vung dem cho so moi cua phep cong
        
    char *tmp = new char[(n1>n2)?n1:n2+2];
        
    //doi vi tri sao cho xau 1 luon la xau co do dai lon nhat hoac bang xau 2
        
    if(n1<n2){
            
    strcpy(tmp,v1);
            for(
    int i=n1;i<n2;i++) tmp[i]='0';
            
    n1=n2;
            
    v1=v2;
        }
        else{
            
    strcpy(tmp,v2);
            for(
    int i=n2;i<n1;i++) tmp[i]='0';
        }
        
    char mem=0;
        for(
    int i=0;i<n1;i++){
            
    char plus tmp[i]-'0'+v1[i]-'0'+mem;
            if(
    plus>=10){
                
    mem=1;
                
    tmp[i]=plus-10+'0';
            }
            else{
                
    mem=0;
                
    tmp[i]=plus+'0';
            }
        }
        if(
    mem==1tmp[i++] = '1';
        
    tmp[i]=0;
        return 
    tmp;
    }
    charBigInt::minus(charv1,charv2){
        
    // v1 > v2
        
    int nstrlen(v1);
        
    char *tmp = new char [n+1];
        
    strcpy(tmp,v2);
        
    int i;
        for(
    i=strlen(tmp);i<n;i++) tmp[i] = '0';
        
    char mem=0;
        for(
    i=0;i<n;i++){
            
    char o1=v1[i]-'0'-mem;
            
    char o2=tmp[i]-'0';
            if(
    o1<o2){
                
    o1+=10;
                
    mem=1;
            }
            else 
    mem=0;
            
    tmp[i]=o1-o2+'0';
        }
        
    i=n;
        while (
    i>&& tmp[i-1]=='0'i--;
    //    if(i==0) tmp[1]==0;
        
    tmp[i]=0;
        return 
    tmp;
    }
    int BigInt::compare(charv1,charv2){
        if (
    strlen(v1) < strlen(v2)) return -1;
        if (
    strlen(v1) > strlen(v2)) return 1;
        
    int n=strlen(v1);
        for(
    int i=n-1;i>=0;i--){
            if(
    v1[i]<v2[i]) return -1;
            if(
    v1[i]>v2[i]) return 1;
        }
        return 
    0;
    }
    charBigInt::multi(charv1,charv2){
        if(
    strcmp(v1,"0")==0||strcmp(v2,"0")==0) return strdup("0");
        
    int n1=strlen(v1);
        
    int n2=strlen(v2);
        
    char *tmp=new char [n1+n2+1];
        
    int n=n1+n2+1;
        
    long mem=0;
        for(
    int i=0;i<n;i++){
            
    long val=mem;
            for(
    int j=0;(j<=i&&j<n1);j++)
                if(
    i-j<n2val+=(v1[j]-'0')*(v2[i-j]-'0');
            
    mem=val/10;
            
    tmp[i]=char(val%10)+'0';
        }
        
    // i == n
        
    while (mem) {
            
    tmp[i++]=char(mem%10)+'0';
            
    mem/=10;
        }
        
    tmp[i]=0;
        return 
    tmp;
    }

    void main(){
        
    BigInt x,y;
        
    clrscr();
        
    cout<<"x = "cin>>x;
        
    cout<<"y = "cin>>y;
        
    cout<<"x+y = "<<(x+y)<<endl;
        
    cout<<"x-y = "<<(x-y)<<endl;
        
    cout<<"x*y = "<<(x*y)<<endl;
        
    cout<<"x/y = "<<(x/y)<<endl;
        
    cout<<"x%y = "<<(x%y)<<endl;
        
    getch();

    với chương trình trên thì hiện 2 lỗi đó là :
    lỗi với bigint::~bigint()
    với lỗi bigint::bigint(char near*,char)

  4. #4
    Ngày gia nhập
    11 2007
    Bài viết
    47

    Cho mình hỏi, sao *value và sign bạn ko cho vào private?
    Đã được chỉnh sửa lần cuối bởi metal_shield : 10-12-2007 lúc 06:06 PM. Lý do: Bỏ trích dẫn

  5. #5
    Ngày gia nhập
    04 2007
    Bài viết
    13

    cho nó vào private thì sao dùng nó trong mấy hàm của public được (ko bít đúng hay sai )

  6. #6
    Ngày gia nhập
    11 2007
    Bài viết
    47

    Mặc định [C++] ai bít sửa giùm lỗi này với !!!!!

    Trích dẫn Nguyên bản được gửi bởi Sieg Xem bài viết
    cho nó vào private thì sao dùng nó trong mấy hàm của public được (ko bít đúng hay sai )
    Bạn sai rồi. private ko che dấu với hàm friend và chính nó.

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

  1. các bạn sửa giùm lỗi này hộ tớ với!
    Gửi bởi mr.cuong_tq trong diễn đàn Nhập môn lập trình Java
    Trả lời: 1
    Bài viết cuối: 01-10-2012, 06:36 PM
  2. Fix lỗi giùm em với ạ
    Gửi bởi anhtnse02984 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 11
    Bài viết cuối: 10-08-2012, 02:19 PM
  3. Turbo C Lỗi Mọi người sữa giùm mình lỗi ni
    Gửi bởi binhlama00 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 0
    Bài viết cuối: 01-03-2012, 08:56 PM
  4. mấy anh sửa lỗi này giùm em nha
    Gửi bởi lu_ngovan trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 3
    Bài viết cuối: 05-05-2010, 04:17 PM
  5. sửa giùm em bài sắp xếp
    Gửi bởi tonggiavinh trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 3
    Bài viết cuối: 19-01-2008, 09:42 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