2011-09-29 196 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) 
{ 
} 
相關問題