我被告知我不能在類函數中使用'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