在this关键字上调用函数

时间:2014-11-23 09:32:30

标签: c++ function this

因此,在我的头文件中,我将这两个变量声明为私有

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指针上调用我的类中定义的函数?是否有一些功能性原因导致我上述方式不起作用?

1 个答案:

答案 0 :(得分:6)

if((this.length()) > (string.length())){

这应该是

if((this->length()) > (string.length())){

因为this是一个指针。基本上this只是一个指针,指向调用成员函数的对象。因此,您必须使用->来引用该类的成员。

另一个建议是停止使用标准关键字的变量名称。比如你的string。如果您包含std命名空间,那么您就有理由不这样做。