QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 2364|回复: 2

新手关于复制构造函数的问题,望高手帮忙费点时间看看!

[复制链接]
发表于 2008-6-22 07:52:42 | 显示全部楼层 |阅读模式
新手关于复制构造函数的问题,望高手帮忙费点时间看看!

自己编了一个字符串类代码如下:
#include <iostream>
using namespace std;

const int n=40;
class mystring {
        char str[n];
        int maxsize;
        int last;
public:
        mystring(){
                last=0;
                maxsize=n;
                str[0]='\0';
        }
        mystring(char *s){
                last=-1;
                maxsize=n;
                do{
                        last++;
                        str[last]=s[last];
                }while(s[last]!='\0'&&last<maxsize-1);
                str[last]='\0';
        }
        mystring(mystring &ms){
                last=ms.last;
                maxsize=ms.maxsize;
                do{
                        last++;
                        str[last]=ms.str[last];
                }while(ms.str[last]!='\0'&&last<maxsize-1);
                str[last]='\0';
        }
        ~mystring(){}
        void show(){
                cout<<str<<endl;
        }
        bool operator<(mystring &);
        mystring & operator=(char *s);
        char operator[](int);
        mystring operator+(mystring &);
        mystring operator+=(mystring &);
        bool operator>(mystring &);
        bool operator==(mystring &);
};
bool mystring:: operator<(mystring &ms){
        int i=0,k;
        do{
                k=str-ms.str;
                i++;
        }while(k==0&&i<last&&i<ms.last);
        if(k<0) return true;
        if(i==last&&i!=ms.last) return true;
        return false;
}
mystring &mystring:: operator=(char *s){
        last=-1;
        do{
                last++;
                str[last]=s[last];
        }while(s[last]!='\0'&&last<maxsize-1);
        str[last]='\0';
        return *this;
}

char mystring:: operator[](int i){
        return *(str+i);
}
mystring mystring:: operator+(mystring &ms){
        int i=0;
//        mystring str;
        for( i=0; str!='\0';i++ ){;
        }
        for( int j=0;*(ms.str+j)!='\0' &&i<ms.maxsize-1;j++ ){
                str[i++]=ms.str[j];
        }
        str='\0';
        return *this;
}
mystring mystring:: operator+=(mystring &ms){
        int i=0;
//        mystring str;
        for( i=0; str!='\0';i++ ){;
        }
        for( int j=0;*(ms.str+j)!='\0' &&i<maxsize-1;j++ ){
                str[i++]=ms.str[j];
        }
        str='\0';
        return *this;
}
bool mystring:: operator>(mystring &ms){
        int i=0,k;
        do{
                k=str-ms.str;
                i++;
        }while(k==0&&i<last&&i<ms.last);
        if(k>0) return true;
        if(i!=last&&i==ms.last) return true;
        return false;
}
bool mystring:: operator==(mystring &ms){
        int i=0,k;
        do{
                k=str-ms.str;
                i++;
        }while(k==0&&i<last&&i<ms.last);
        if(i==last&&i==ms.last) return true;
        return false;
}
一个主程序如下:
#include <iostream>
#include "mystring.h"
using namespace std;
template<typename T>void bubblesort(T *slist,int n){
        bool noswap;
        int i,j;
        T temp;
        for( i=0;i<n-1 ;i++ ){
                noswap=true;
                for( j=n-1;j>i ;j-- ){
                        if(slist[j]<slist[j-1]){
                                temp=slist[j];
                                slist[j]=slist[j-1];
                                slist[j-1]=temp;
                                noswap=false;
                        }
                }
                if(noswap) break;
        }
}
int main(){
        const int h=10;
        int i;
        mystring list[10]={"cat","book","car","zoo","fish","cab","dog","cap","fox","can",""};
        cout<<"未排序数组:"<<endl;
        for( i=0;i<h ;i++ ){
                list.show();
        }
        bubblesort(list,h);
        cout<<"已排序数组:"<<endl;
        for( i=0;i<h ;i++ ){
                list.show();
        }
        return 0;

编译时出现如下问题,请帮忙费点时间看看
bubble.cpp: In function ‘int main()’:
bubble.cpp:26: 错误:‘mystring [10]’的初始值设定项太多
bubble.cpp:26: 警告:不建议使用从字符串常量到‘char*’的转换
bubble.cpp:26: 错误:对‘mystring::mystring(mystring)’的调用没有匹配的函数
mystring.h:24: 附注:备选为: mystring::mystring(mystring&)
mystring.h:15: 附注:         mystring::mystring(char*)
bubble.cpp:26: 警告:不建议使用从字符串常量到‘char*’的转换
bubble.cpp:26: 错误:对‘mystring::mystring(mystring)’的调用没有匹配的函数
mystring.h:24: 附注:备选为: mystring::mystring(mystring&)
mystring.h:15: 附注:         mystring::mystring(char*)
bubble.cpp:26: 警告:不建议使用从字符串常量到‘char*’的转换
bubble.cpp:26: 错误:对‘mystring::mystring(mystring)’的调用没有匹配的函数
mystring.h:24: 附注:备选为: mystring::mystring(mystring&)
mystring.h:15: 附注:         mystring::mystring(char*)
bubble.cpp:26: 警告:不建议使用从字符串常量到‘char*’的转换
bubble.cpp:26: 错误:对‘mystring::mystring(mystring)’的调用没有匹配的函数
mystring.h:24: 附注:备选为: mystring::mystring(mystring&)
mystring.h:15: 附注:         mystring::mystring(char*)
bubble.cpp:26: 警告:不建议使用从字符串常量到‘char*’的转换
bubble.cpp:26: 错误:对‘mystring::mystring(mystring)’的调用没有匹配的函数
mystring.h:24: 附注:备选为: mystring::mystring(mystring&)
mystring.h:15: 附注:         mystring::mystring(char*)
bubble.cpp:26: 警告:不建议使用从字符串常量到‘char*’的转换
bubble.cpp:26: 错误:对‘mystring::mystring(mystring)’的调用没有匹配的函数
mystring.h:24: 附注:备选为: mystring::mystring(mystring&)
mystring.h:15: 附注:         mystring::mystring(char*)
bubble.cpp:26: 警告:不建议使用从字符串常量到‘char*’的转换
bubble.cpp:26: 错误:对‘mystring::mystring(mystring)’的调用没有匹配的函数
mystring.h:24: 附注:备选为: mystring::mystring(mystring&)
mystring.h:15: 附注:         mystring::mystring(char*)
bubble.cpp:26: 警告:不建议使用从字符串常量到‘char*’的转换
bubble.cpp:26: 错误:对‘mystring::mystring(mystring)’的调用没有匹配的函数
mystring.h:24: 附注:备选为: mystring::mystring(mystring&)
mystring.h:15: 附注:         mystring::mystring(char*)
bubble.cpp:26: 警告:不建议使用从字符串常量到‘char*’的转换
bubble.cpp:26: 错误:对‘mystring::mystring(mystring)’的调用没有匹配的函数
mystring.h:24: 附注:备选为: mystring::mystring(mystring&)
mystring.h:15: 附注:         mystring::mystring(char*)
bubble.cpp:26: 警告:不建议使用从字符串常量到‘char*’的转换
bubble.cpp:26: 错误:对‘mystring::mystring(mystring)’的调用没有匹配的函数
mystring.h:24: 附注:备选为: mystring::mystring(mystring&)
mystring.h:15: 附注:         mystring::mystrin
发表于 2008-7-16 13:39:54 | 显示全部楼层
  1. mystring list[10]={"cat","book","car","zoo","fish","cab","dog","cap","fox","can",""};
复制代码

你数一下……
别的我还没看。
代码放在[code][/code]里面
回复

使用道具 举报

发表于 2008-8-7 13:12:57 | 显示全部楼层
- mystring(mystring &ms){
+ mystring(const mystring &ms){
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-4-20 19:55 , Processed in 0.074654 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表