#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;
}
C++一道程序,没有与这些操作数匹配的"[]"运算符
答案:3 悬赏:70 手机版
解决时间 2021-02-25 07:28
- 提问者网友:兔牙战士
- 2021-02-24 13:32
最佳答案
- 五星知识达人网友:迷人又混蛋
- 2021-02-24 13:58
赋值运算符是编译器自动重载的, 但是下标运算符你没有重载.
你这个程序还不止那一处错误:
String& operator=(const String &s){};
这个明显是一个函数声明, 但是你加了一对大括号.
你这个程序还不止那一处错误:
String& operator=(const String &s){};
这个明显是一个函数声明, 但是你加了一对大括号.
全部回答
- 1楼网友:傲气稳了全场
- 2021-02-24 15:05
s是String类型,不能用s[i], 你可以用s.SubString(1,1)这样子的
另外你这里可以用 strcpy(p,s)也许是这样strcpy(p,s.c_str())
- 2楼网友:神鬼未生
- 2021-02-24 14:28
你没有做<<运算符重载啊!
类中增加
friend ostream &operator<<(ostream &os,const string &s); 重载函数
在类外进行函数实现
ostream &operator<<(ostream &os,const string &s)
{
os << s.m_data ;
return os;
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯