收录日期:2018/06/20 12:01:34 时间:2016/05/18 03:14:55 标签:C语言
1. 类的头文件如下:

//...
MyString( const MyString &rhs ); //MyString a( b ) 
char* c_str(){ return _string;}
//....
成员变量只有
int _size;
char* _string;

2. 类的实现文件如下:

//...
inline MyString::MyString(const MyString &rhs)


_string = new char[strlen(rhs.c_str())]; //就是这个地方出错
strcpy(_string, rhs.c_str()); //就是这个地方出错
_string[_size] = '\0';
}
//...

为什么编译的时候老是出现
error C2662: 'c_str' : cannot convert 'this' pointer from 'const class MyString' to 'class MyString &'
        Conversion loses qualifiers
把inline去掉试试,如果不行就贴代码吧
char* c_str(){ return _string;}将这个改为:

char* c_str()const { return _string;}

不对, 这样:

const char* c_str() const { return _string;}
inline MyString::MyString(  MyString &rhs)


_string = new char[strlen(rhs.c_str())];
  strcpy(_string, rhs.c_str());  
_string[_size] = '\0';
}
楼主的这段代码实在不安全,如果外面有人利用你c_str返回的指针修改了执行的内容不久可以绕过你的类直接修改字符串的内容了?至少要把返回值改成const char *吧
不会影响什么的,因为C++标准规定const char *可以直接转成char *
const char* c_str() const { return _string;}
to楼上:
why要家两个const
程序运行,家后面一个就ok了,表明和
inline MyString::MyString(const MyString &rhs)里的const对应起来,否则就出现问题!
第一个仅仅表明返回的char*是const
#include<iostream>
#include<cmath>
using namespace std;
class MyString
{
public:
MyString(int n,char* data);
MyString(){_string=new char[1];}
MyString( const MyString &rhs );
void print();
char*c_str()const{ return _string;}
private:
int _size;
char * _string;
};

MyString::MyString(int n,char* data)
{
_string=new char[n];
strcpy(_string,data);
}

MyString::MyString(const MyString &rhs)

_size=strlen(rhs.c_str());
_string = new char[_size+1];
strcpy(_string, rhs.c_str());
_string[_size] = '\0';
}

int main()
{
char data[5];
char data1[5];
strcpy(data,"zhao");
cout<<data<<endl;
MyString t(5,data),d(t);
cout<<data<<endl;
return 0;
}
//自己看看~~你的有一处错误~我已经帮你改过来了
感谢大家