首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

没与这些操作数匹配的"[]"运算符

2013-04-20 
没有与这些操作数匹配的[]运算符class String{public: char *m_s char& operator[](int i) friend boo

没有与这些操作数匹配的"[]"运算符


class String
{
public:
 char *m_s;
 char& operator[](int i);
 friend bool operator==(const String& s1,const String &s2);//没有私有成员,friend多余?
};

char& String::operator[](int i)
{
    return m_s[i];
}
bool operator==(const String& s1,const String &s2)
{
 for(int i=0;s1[i];i++)//error:没有与这些操作数匹配的"[]"运算符
 {
  if(s1.m_s[i]!=s2.m_s[i])
   return FALSE;
 }
 return TRUE;
}

有这两个小问题
[解决办法]
增加一个成员函数:
char operator[](int i)const; 
[解决办法]
引用:
引用:增加一个成员函数:
char operator[](int i)const;
解决了,什么原理啊

还剩这个问题:
"==" 可能是bool operator==(const String &,const String &)
也可能是内置C++ operator==(char *, char ……


const无法调用非const函数

这个就需要函数重载了。
[解决办法]
引用:
Quote: 引用:

C/C++ code?12for(int i=0;s1[i];i++)//OKfor(int i=0;s1[i]=3;i++)//error
如此测试结果是否说明s1[]只要出现在条件里总是调用只读版的,那个可写的版本何时才会被编译器调用?


当你的bool operator==(const String& s1,const String &s2)变成
     bool operator==(String& s1,String &s2)的时候
[解决办法]
引用:
Quote: 引用:

C/C++ code?12for(int i=0;s1[i];i++)//OKfor(int i=0;s1[i]=3;i++)//error
如此测试结果是否说明s1[]只要出现在条件里总是调用只读版的,那个可写的版本何时才会被编译器调用?


看参数表,那个对象就是只读的,所以调用的成员函数也是只读的。

热点排行