8

有人告诉我,我不能在类函数中使用“this”关键字。我来自 c#,我已经习惯了这种工作方式,但编译器告诉我它只能在非静态成员函数中使用。

D3DXVECTOR3 position;

void Position(D3DXVECTOR3 position)
{
    this.position = position;
}
4

3 回答 3

18

这是一个包含对象地址的指针。

D3DXVECTOR3 position;

void YourClassNameHere::Position(D3DXVECTOR3 position)
{
    this->position = position;
}

应该管用。

D3DXVECTOR3 position;

void YourClassNameHere::Position(D3DXVECTOR3 position)
{
    (*this).position = position;
}

也应该工作。

于 2011-09-29T16:24:48.887 回答
16

在 C++ 中,您需要Position使用类名限定您的函数:

void YourClassNameHere::Position(D3DXVECTOR3 position)

同样来自@Pubby8 的答案this是指针,而不是引用,因此您需要this->position改用(或考虑使用不影响类成员的参数名称 - 我喜欢_在我的类成员上使用尾随)。

此外,默认情况下 C++ 不会通过引用传递,因此如果D3DXVECTOR3是复杂类型,您将复制大量数据。考虑const D3DXVECTOR3& position改为传递它。

于 2011-09-29T16:24:21.053 回答
4

您编写它的方式不仅是Position自由函数(不与类关联),而且this还是指针,而不是引用。

D3DXVECTOR3 position;

void ClassName::Position(D3DXVECTOR3 position)
{
    this->position = position;
}

或者,如果那应该是一个构造函数,

ClassName::ClassName(D3DXVECTOR3 p) : position(p)
{
}
于 2011-09-29T16:26:32.710 回答