| 
 | 
 
新手关于复制构造函数的问题,望高手帮忙费点时间看看! 
 
自己编了一个字符串类代码如下: 
#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 |   
 
 
 
 |