lgyaa 发表于 2008-6-22 07:52:42

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

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

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

const int n=40;
class mystring {
      char str;
      int maxsize;
      int last;
public:
      mystring(){
                last=0;
                maxsize=n;
                str='\0';
      }
      mystring(char *s){
                last=-1;
                maxsize=n;
                do{
                        last++;
                        str=s;
                }while(s!='\0'&&last<maxsize-1);
                str='\0';
      }
      mystring(mystring &ms){
                last=ms.last;
                maxsize=ms.maxsize;
                do{
                        last++;
                        str=ms.str;
                }while(ms.str!='\0'&&last<maxsize-1);
                str='\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=s;
      }while(s!='\0'&&last<maxsize-1);
      str='\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=ms.str;
      }
      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=ms.str;
      }
      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<slist){
                              temp=slist;
                              slist=slist;
                              slist=temp;
                              noswap=false;
                        }
                }
                if(noswap) break;
      }
}
int main(){
      const int h=10;
      int i;
      mystring list={"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 ’的初始值设定项太多
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

mystring list={"cat","book","car","zoo","fish","cab","dog","cap","fox","can",""};
你数一下……
别的我还没看。
代码放在里面

pagx 发表于 2008-8-7 13:12:57

- mystring(mystring &ms){
+ mystring(const mystring &ms){
页: [1]
查看完整版本: 新手关于复制构造函数的问题,望高手帮忙费点时间看看!