8

クラス関数で「this」キーワードを使用できないと言われています。私はC#から来ており、この作業に慣れていますが、コンパイラは非静的メンバー関数内でのみ使用できると言っています。

D3DXVECTOR3 position;

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

3 に答える 3

18

これは、オブジェクトのアドレスを含むポインターです。

D3DXVECTOR3 position;

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

動作するはずです。

D3DXVECTOR3 position;

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

また、動作するはずです。

于 2011-09-29T16:24:48.887 に答える
16

PositionC++ では、関数をクラス名で修飾する必要があります。

void YourClassNameHere::Position(D3DXVECTOR3 position)

また、@ Pubby8の回答thisは参照ではなくポインターであるため、代わりに使用する必要がありますthis->position(または、クラスメンバーをシャドウしないパラメーター名の使用を検討してください-クラスメンバーの末尾を使用するのが好き_です)。

また、C++ はデフォルトで参照渡しを行わないためD3DXVECTOR3、複雑な型の場合、大量のデータをコピーすることになります。const D3DXVECTOR3& position代わりに as を渡すことを検討してください。

于 2011-09-29T16:24:21.053 に答える
4

Positionフリー関数 (クラスに関連付けられていない) は、記述したとおりであるだけthisでなく、参照ではなくポインターでもあります。

D3DXVECTOR3 position;

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

または、それがコンストラクターであると想定されている場合は、

ClassName::ClassName(D3DXVECTOR3 p) : position(p)
{
}
于 2011-09-29T16:26:32.710 に答える