因此,在我的头文件中,我将这两个变量声明为私有
private:
char* data;
int len;
并让它访问它
int length() const { return len; }
然后在我的cpp文件中,我试图在字符串实现中覆盖运算符,如下所示:
bool MyString::operator>(const MyString& string)
{
//Compare the lengths of each string
if((this.length()) > (string.length())){
return 0;
}
//The given string is shorter
return -1;
}
当我编译它时,我收到此错误:
mystring.cpp:263:14:错误:请求'this'中的成员'length',这是非类型'MyString * const'
通过尝试调用.length()
,我可以告诉我这是在尝试访问导致问题的this指针上的变量,例如在this question中。
那很好,因为我可以这样做:
bool MyString::operator>(const MyString& string)
{
//Compare the lengths of each string
if((this->len) > (string.length())){
return 0;
}
//The given string is shorter
return -1;
}
编译好但现在我想知道你如何在这个指针上调用一个函数。我认为这是因为它是一个指针我必须首先取消引用它,所以我尝试了这个:
bool MyString::operator>=(const MyString& string)
{
//Compare the lengths of each string
if((*(this).length()) >= (string.length())){
return 0;
}
//The given string is shorter but not equal
return -1;
}
但我又得到了这个错误:
mystring.cpp:273:17:错误:请求'this'中的成员'length',这是非类型'MyString * const'
看起来这应该工作得很好,因为我会将指针解引用到它所指向的对象确实具有该方法,但我似乎错过了一些东西。我如何在this
指针上调用我的类中定义的函数?是否有一些功能性原因导致我上述方式不起作用?
答案 0 :(得分:6)
if((this.length()) > (string.length())){
这应该是
if((this->length()) > (string.length())){
因为this
是一个指针。基本上this
只是一个指针,指向调用成员函数的对象。因此,您必须使用->
来引用该类的成员。
另一个建议是停止使用标准关键字的变量名称。比如你的string
。如果您包含std命名空间,那么您就有理由不这样做。