收录日期:2019/03/19 04:29:32 时间: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;
}
//自己看看~~你的有一处错误~我已经帮你改过来了
感谢大家

怎样给VB.Net控件加图标? 如何设置编译参数 java applet里可以控制浏览器的行为么?譬如点击一个按钮,打开一个新的浏览器 数据插入(insert into) 问题 为什么installshield8.0中修改了dialog的图片位置,下面的line就不显示了? 关于Applet在Weblogic7上的发布问题!(在线等待高手出现) 100分求教1个Url转发方面的问题 基础性问题 我的Function要返回select * from MyTable的内容,请问返回的数据集是什么类型的变量? 现在的水园都快成垃圾场了!! b/s刚入门,为什么表单里的html代码不被执行? ……【【【【【【listcontrol中setitemdata()后并没有显示subitem,怎么回事?】】】】】…… 100分求教1个Url转发方面的问题 请教VC中有没有类似VB的Split的函数 静态切分窗口,在一个Pane中显示多个View的问题 初次进来,请大家多多指教!! MSN语音聊天的问题~~~ 简单问题,在线等待~~! 请问哪儿有闹钟的铃声下载呀 大家请帮我猜个谜!! 如何当用户关闭浏览器的时候自动注销用户的信息? Request.QueryString 乱码问题。 学习编写如何操纵Excel时,遇到一个小问题,求助 如何对加了日期格式校验的Tabel控件,在不做输入时对数据库表的日期字段存入空值null,而不报校验错? 请教高人一个\'jmail\'组件的问题,谢谢. 我的显卡是NVidia Riva TNT2 Model 64, 请问是不是不支持D3D? 我在Win2000上很多游戏都玩不了(CS很慢)。 请教cvs高手 急急急 2003也出了有段时间了,不知道大家对2003怎么看 和XP,2000 比较 如何在VFP6.0中得到指定打印机的driver、port等信息 亟待解决!!!100分!