我被告知我不能在类函数中使用'this'关键字。我来自C#,我习惯了这个工作,但编译器告诉我,它只能用于非静态成员函数。什么是非静态成员函数?
D3DXVECTOR3 position;
void Position(D3DXVECTOR3 position)
{
this.position = position;
}
我被告知我不能在类函数中使用'this'关键字。我来自C#,我习惯了这个工作,但编译器告诉我,它只能用于非静态成员函数。什么是非静态成员函数?
D3DXVECTOR3 position;
void Position(D3DXVECTOR3 position)
{
this.position = position;
}
这是一个指针包含对象的地址。
D3DXVECTOR3 position;
void YourClassNameHere::Position(D3DXVECTOR3 position)
{
this->position = position;
}
应该工作。
D3DXVECTOR3 position;
void YourClassNameHere::Position(D3DXVECTOR3 position)
{
(*this).position = position;
}
也应该工作。
@AndréCaronHeh,没有注意到。我编辑了包含MarkB的更改。 – Pubby
@AndréCaron除了我们不知道,因为他没有给我们任何背景。 –
在C++中,你需要用类名来限定你的Position
功能:
void YourClassNameHere::Position(D3DXVECTOR3 position)
this
而且是一个指针,而不是一个参考,所以你需要使用this->position
代替(或者考虑使用不影响类成员的参数名称 - 我喜欢在我的类成员上使用尾随_
)。
此外,C++默认没有通过引用传递,所以如果D3DXVECTOR3
是一个复杂的类型,你会复制大量的数据。考虑把它作为const D3DXVECTOR3& position
来代替。
Position
不仅是一个自由功能(与类没有关联),你写它的方式,但this
也是一个指针,而不是一个引用。
D3DXVECTOR3 position;
void ClassName::Position(D3DXVECTOR3 position)
{
this->position = position;
}
或者,如果这应该是一个构造函数,
ClassName::ClassName(D3DXVECTOR3 p) : position(p)
{
}
你确定它在C#中的工作?在c#中,一个'类函数'被称为'静态方法',你不能在这些中使用'this'? – muratgu
是的,我一直在构造函数中引用一个类变量,或者构造函数不同? – SirYakalot
也许你应该展示这种方法所属的类 - 这可能有助于澄清你在做什么 – Useless