2011-09-29 145 views
5

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

D3DXVECTOR3 position; 

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

你确定它在C#中的工作?在c#中,一个'类函数'被称为'静态方法',你不能在这些中使用'this'? – muratgu

+0

是的,我一直在构造函数中引用一个类变量,或者构造函数不同? – SirYakalot

+0

也许你应该展示这种方法所属的类 - 这可能有助于澄清你在做什么 – Useless

回答

11

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

D3DXVECTOR3 position; 

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

应该工作。

D3DXVECTOR3 position; 

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

也应该工作。

+0

@AndréCaronHeh,没有注意到。我编辑了包含MarkB的更改。 – Pubby

+0

@AndréCaron除了我们不知道,因为他没有给我们任何背景。 –

14

在C++中,你需要用类名来限定你的Position功能:

void YourClassNameHere::Position(D3DXVECTOR3 position)

从@ Pubby8的回答 this

而且是一个指针,而不是一个参考,所以你需要使用this->position代替(或者考虑使用不影响类成员的参数名称 - 我喜欢在我的类成员上使用尾随_)。

此外,C++默认没有通过引用传递,所以如果D3DXVECTOR3是一个复杂的类型,你会复制大量的数据。考虑把它作为const D3DXVECTOR3& position来代替。

3

Position不仅是一个自由功能(与类没有关联),你写它的方式,但this也是一个指针,而不是一个引用。

D3DXVECTOR3 position; 

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

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

ClassName::ClassName(D3DXVECTOR3 p) : position(p) 
{ 
} 
相关问题