在C++中结构体构造函数使用"this"关键字会导致编译错误?

6

我有以下内容:

int main()
{
    struct A
    {
        unsigned char x, y;

        A(unsigned char x, unsigned char y)
        {
            this.x = x; // Error: expression must have class type.
            thix.y = y; // Error: expression must have class type.
        }
    };

    return 0;
}

如何正确引用struct Axy变量,而不是构造函数参数中Axy变量?

谢谢。


@PaulMcKenzie 连结构体都没有构造函数? - Hatefiend
2
this 指针始终存在。使用 this->(*this). 来解引用它。 - πάντα ῥεῖ
1
@Hatefiend,“C”语言没有构造函数、析构函数、成员函数等等。这就是为什么“C”标签被移除的原因。 - PaulMcKenzie
哦,好的。我知道 Cstruct,所以我以为这个问题会有点相关。抱歉。 - Hatefiend
@Hatefiend:偶尔会有一些与C和C++相关的问题,但它们相对较少。你最好选择其中一种语言(听起来对你来说是C ++),而不是双重标记。当不适当时,双重标记会使两种语言标记的居民感到烦恼,而这种情况很多。如果你不确定,请选择一个语言标记,而不是两个。 - Jonathan Leffler
显示剩余2条评论
1个回答

13

this 是一个指针,所以你需要对它进行解引用:

this->x = x;
this->y = y;

无论是 struct 还是 class,在这两种情况下都是指针。唯一的区别是 struct 的成员默认为 public,而 class 的成员默认为 private

此外,在函数内部定义 structclass 不是一个好主意,应该在全局范围内完成定义。


所以...在类的构造函数中,我可以使用this.VARIABLE_NAME_HERE,但是对于struct我必须使用指针符号-> - Hatefiend
1
在C++中,这总是一个指针,在类和结构体中都是如此。 - badgerr
啊,我明白了。所以在C++中,this.variable这种格式是没有意义的? - Hatefiend
@Hatefiend 正确。它是一个指针,而不是 structclass - dbush
@Hatefiend:说实话,“this”是指向类或结构体当前实例的指针。 - Thomas Matthews

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接