C_and_CPP 板


LINE

//排的有点丑,请包涵 //DevC++编译不过 //其指出的错误已加在code内 #include<iostream> #include<string.h> using namespace std; class String { protected: char *str; int length; int capacity; public: String() { str=new char[100]; memset(str,0,sizeof(char)*100); length=0,capacity=100; } String(const char *a)//fixed:plus "const" { length=strlen(a),capacity=100; if(length>=capacity) { str=new char[length+1]; memset(str,0,sizeof(char)*(length+1)); capacity=length+1; strcpy(str,a); //for(int i=0;i<=length;i++)str[i]=a[i]; } else { str=new char[100]; strcpy(str,a); //for(int i=0;i<=length;i++)str[i]=a[i]; str[length]=0; } } String(const String &a)//fixed:plus "const" { length=a.length; capacity=100; if(a.length>=capacity) { //delete str; str=new char[length+1]; capacity=length+1; memset(str,0,sizeof(char)*(length+1)); strcpy(str,a.str); } else { str=new char[100]; strcpy(str,a.str); str[length]=0; } } ~String() { delete []str; length=0; capacity=0; } friend bool operator==(const String &a,const char *b) { return strcmp(a.str,b)==0; } friend bool operator==(const String &a,const String &b) { return strcmp(a.str,b.str)==0; } friend bool operator==(const char *a,const String &b) { return strcmp(a,b.str)==0; } friend bool operator!=(const String &a,const char *b) { return (!(a==b)); } friend bool operator!=(const String &a,const String &b) { return (!(a==b)); } friend bool operator!=(const char *a,const String &b) { return (!(a==b)); } friend ostream& operator<<(ostream& stream,const String& a) { return (stream<<a.str); } friend istream& operator>>(istream& stream,const String& a) { return stream>>a.str; } /*-------------------Error from here-----------------------------*/ const String& operator=(const String& a) /*Error:must be a nonstatic function*/ /*Error:must take exactly two arguments*/ //已订正 { length=a.length; /*invalid use of non-static data member*/ if(length>=this.capacity)/*invalid use again*/ { delete str; /*invalid use of 'this' in none member func.*/ /*non-static data member again*/ str=new char[length+1]; capacity=length+1; strcpy(str,a.str); //以下关於str、length、capacity几乎都有invalid use的问题 //friend 订正完後没事了 } else { strcpy(str,a.str); } } const String& operator=(const char* a) /*Error:must be a nonstatic function Error:must take exactly two arguments*/ //已订正 { length=strlen(a); if(length>=capacity) { delete str; str=new char[length+1]; capacity=length+1; strcpy(str,a); } else { strcpy(str,a); } } friend const String operator+(const String& a,String& b) { char *k=new char[a.length+b.length+1]; strcpy(k,a.str); strcat(k,b.str); String Sum(k); return Sum; } friend const String operator+(const char* a,String& b) { char *k=new char[strlen(a)+b.length+1]; strcpy(k,a); strcat(k,b.str); String Sum(k); return Sum; } friend const String operator+(const String& a,char* b) { char *k=new char[a.length+strlen(b)+1]; strcpy(k,a.str); strcat(k,b); String Sum(k); return Sum; } }; /* 请问要怎麽改才对呢? 另外,有时後会看到operator+(单引数) 但Dev C++会显示错误 又是怎麽回事(已解) */ /* 再问一个问题 就是使用字串加法的时候 编译器会显示no matching function for call to 'String::String(const String)' candidates are: String::String(String&) String::String(char*) 是指怎样的错? (建构式要加上const,否则operator在配置暂存的String时会出错) */ - --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 218.165.105.228
1F:→ weiyucsie:首先就是memset那边可能不该写sizeof(str) 05/21 20:50
2F:→ zenixls2:那边我确定可以这样用,相当於完全清空 测试也没事 05/21 20:52
3F:→ legnaleurc:sizeof(str)是4或8 05/21 20:56
4F:→ legnaleurc:该是member的就member,不要全部无限上纲成friend 05/21 20:59
5F:→ zenixls2:啊!...我知道什麽意思了 非常感谢 05/21 21:03
※ 编辑: zenixls2 来自: 218.165.105.228 (05/21 21:30)
6F:→ weiyucsie:印象中this应该是个指标 要写this-> 05/21 21:26
7F:→ weiyucsie:然後可能就像四楼说的 有些可以不用friend 05/21 21:28
8F:→ weiyucsie:感觉一个参数的operator=不用加friend 因为都是String 05/21 21:29
9F:→ weiyucsie:(不知道有没有记错 太久没用c++的friend了) 05/21 21:29
10F:→ zenixls2:friend订正过了 感谢 05/21 21:38
※ 编辑: zenixls2 来自: 218.165.105.228 (05/21 21:48)
11F:→ zenixls2:有人能解我最後一个疑惑吗? 05/21 22:18
12F:→ akasan:String(const String&) 05/21 22:44
13F:→ akasan:String(const char*) 05/21 22:45
※ 编辑: zenixls2 来自: 218.165.100.123 (05/22 21:04)







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Boy-Girl站内搜寻

TOP