Что такое нестатическая функция-член? - PullRequest
6 голосов
/ 29 сентября 2011

Мне говорят, что я не могу использовать ключевое слово this в функции класса. Я пришел из c #, и я привык к этой работе, но компилятор говорит мне, что он может использоваться только в нестатических функциях-членах.

D3DXVECTOR3 position;

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

Ответы [ 3 ]

15 голосов
/ 29 сентября 2011

В C ++ вам нужно квалифицировать вашу Position функцию с именем класса:

void YourClassNameHere::Position(D3DXVECTOR3 position)

Также из ответа @ Pubby8 this является указателем, а не ссылкой, поэтомувместо этого вам нужно использовать this->position (или рассмотреть возможность использования имен параметров, которые не скрывают членов класса - мне нравится использовать конечные значения _ для моих членов класса).

Кроме того, C ++ не передается по ссылкепо умолчанию, поэтому, если D3DXVECTOR3 является сложным типом, вы будете копировать много данных.Попробуйте вместо этого передать const D3DXVECTOR3& position.

14 голосов
/ 29 сентября 2011

это указатель , содержащий адрес объекта.

D3DXVECTOR3 position;

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

Должен работать.

D3DXVECTOR3 position;

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

Также должен работать.

4 голосов
/ 29 сентября 2011

Мало того, что вы написали Position не только свободную функцию (не связанную с классом), но и this также является указателем, а не ссылкой.

D3DXVECTOR3 position;

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

или, если предполагается, что это конструктор,

ClassName::ClassName(D3DXVECTOR3 p) : position(p)
{
}
...