这是什么意思:“成员引用类型'Human *'是一个指针;您是要使用'->'吗?”

时间:2019-06-04 19:49:07

标签: c++ pointers

我正在使用C ++编写类。

我基本上是在重做here,但使用的是C ++。

进展顺利,但是我不明白错误member reference type 'Human *' is a pointer; did you mean to use '->'?的含义。我从没使用过->,也曾见过*以这种方式使用(例如const char *),但我不太确定它是如何工作的。

我找到的最接近的问题是this,但答复没有帮助。

这是我的代码

#include <stdio.h>
#include <cstdlib>
#include <iostream>
using std::cout;
using std::cin;
using std::string;

class Human {
    public:
    string Name;
    int Age;
    double Height;

    void Initialise(string name, int age, double height) {
        this.Name = name; // Error here
        this.Age = age; // Error here
        this.Height = height; // Error here
    }

    void Grow(double rate) {
        if (rate < 0) {
            cout << "You can't grow at a negative rate, silly.\n";
            return;
        }
        else if (rate >= 0.2) {
            cout << "You can't grow that high, silly.\n";
            return;
        }
        this.Height += rate; // Here too
    }
};

int main() {
    return 0;
}

1 个答案:

答案 0 :(得分:3)

  1. this始终是指针,因此您不能说this.Name,而需要说(*this).Name

  2. 语法a->b等同于(*a).b,因此您可以 说出this->Name(这是错误消息明确建议的内容),尽管:

  3. 内部方法中,this->是多余的。通常,您可以简单地引用或分配给Name (尽管,正如杰里米·弗里斯纳(Jeremy Friesner)在其评论中指出的那样,可能会有rare/esoteric cases where you might actually want or need it)。

  4. 正如评论所说,必须正式学习C ++。您只需知道要点1和2(以及类似的一百万种其他约定)。你不能偶然发现他们。反复试验将不起作用。

  5. ->语法甚至不是C ++特定的。它是C的一部分。C规则手册非常苗条-因此,在继续学习C ++的“ batsmurf疯狂”复杂性之前(在这里我只能同意user4581301),首先正式学习它是一个好主意。 p>