什么是非静态成员函数?

时间:2011-09-29 16:21:47

标签: c++ methods member non-static

我被告知我不能在类函数中使用'this'关键字。我来自c#,我已经习惯了这个工作,但是编译器告诉我它只能在非静态成员函数中使用。

D3DXVECTOR3 position;

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

3 个答案:

答案 0 :(得分:15)

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

void YourClassNameHere::Position(D3DXVECTOR3 position)

同样来自@ Pubby8的回答this是一个指针,而不是一个引用,所以你需要使用this->position代替(或考虑使用不影响类成员的参数名称 - 我喜欢使用尾随{我的班级成员{1}}。

此外,默认情况下,C ++不会通过引用传递,因此如果_是一个复杂的类型,您将复制大量数据。请考虑将其作为D3DXVECTOR3传递。

答案 1 :(得分:14)

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

D3DXVECTOR3 position;

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

应该工作。

D3DXVECTOR3 position;

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

也应该有效。

答案 2 :(得分:4)

Position不仅是一个自由函数(与类没有关联),而且this也是一个指针,而不是一个引用。

D3DXVECTOR3 position;

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

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

ClassName::ClassName(D3DXVECTOR3 p) : position(p)
{
}