C++一道程序,没有与这些操作数匹配的"[]"运算符 5

#include<iostream>#include<string>usingnamespacestd;classString{public:String(){p=NUL... #include <iostream>
#include <string>
using namespace std;
class String
{
public:
String() { p=NULL;}
String(char *str){ p=str; };
friend bool operator>(String &str1,String &str2);
friend bool operator<(String &str1,String &str2);
friend bool operator==(String &str1,String &str2);
String& operator=(const String &s){};
void display();
int getlen()const { return len;}

private:
char *p;
int len;

};
void String::display()
{ cout<<p;}
bool operator>(String &str1,String &str2)
{
if(strcmp(str1.p,str2.p)>0)
return true;
else
return false;
}
bool operator<(String &str1,String &str2)
{
if(strcmp(str1.p,str2.p)<0)
return true;
else
return false;
}
bool operator==(String &str1,String &str2)
{
if(strcmp(str1.p,str2.p)==0)
return true;
else
return false;
}

String& String::operator=(const String &s)
{
if(this==&s)
return *this;
else
{
delete []p;
len=s.getlen();
p=new char[len+1];
for(int i=0;i<len;i++)
{
p[i]=s[i];//这里就说没有与这些操作数匹配的"[]"运算符,可是赋值运算符不是重载了吗为什么还不行?
}
p[len]='\0';
}
return *this;

}
展开
 我来答
文正153
2015-06-21 · TA获得超过2.1万个赞
知道大有可为答主
回答量:2221
采纳率:63%
帮助的人:633万
展开全部
赋值运算符是编译器自动重载的, 但是下标运算符你没有重载.
你这个程序还不止那一处错误:
String& operator=(const String &s){};

这个明显是一个函数声明, 但是你加了一对大括号.
追问
我去掉大括号还是提示一样的错误啊
追答
我不是说了, 你那程序不只是一个错误. 下标运算符你没有重载, 但是你用了这个运算符.你应该改成这样:
p[i]=s.p[i]
bcatv
2015-06-21 · TA获得超过4434个赞
知道大有可为答主
回答量:4763
采纳率:77%
帮助的人:569万
展开全部
s是String类型,不能用s[i], 你可以用s.SubString(1,1)这样子的
另外你这里可以用 strcpy(p,s)也许是这样strcpy(p,s.c_str())
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式