2011-09-29 19 views
5

Me dicen que no puedo usar la palabra clave 'this' en una función de clase. Vengo de C# y estoy acostumbrado a este funcionamiento, pero el compilador me dice que solo se puede usar dentro de funciones de miembros no estáticos.¿Qué es una función de miembro no estático?

D3DXVECTOR3 position; 

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

¿Estás seguro que trabajó en C#? en C#, una 'función de clase' se llama 'método estático', ¿y tampoco se puede usar 'esto'? – muratgu

+0

Sí, lo hice todo el tiempo para referirme a una variable de clases en el constructor, ¿o es el constructor diferente? – SirYakalot

+0

Quizás debería mostrar la clase a la que pertenece este método, eso podría ayudar a aclarar lo que está haciendo – Useless

Respuesta

11

este es un puntero que contiene la dirección del objeto.

D3DXVECTOR3 position; 

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

Debería funcionar.

D3DXVECTOR3 position; 

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

También debería funcionar.

+0

@ AndréCaron Heh, no lo notó. Modifiqué para incluir los cambios de MarkB. – Pubby

+0

@ AndréCaron Excepto que no lo sabemos, porque no nos ha dado ningún contexto. –

14

En C++ que necesita para calificar su función Position con el nombre de clase:

void YourClassNameHere::Position(D3DXVECTOR3 position)

Además de @ respuesta de Pubby8 this es un puntero, no una referencia por lo que es necesario utilizar this->position vez (o considere usar nombres de parámetros que no sombreen a los miembros de la clase; me gusta usar el _ posterior en los miembros de mi clase).

Además, C++ no pasa por referencia por defecto, por lo que si D3DXVECTOR3 es un tipo complicado, estará copiando una gran cantidad de datos. Considere pasarlo como const D3DXVECTOR3& position en su lugar.

3

No solo es Position una función gratuita (no asociada a una clase) de la forma en que la escribió, pero this también es un puntero, no una referencia.

D3DXVECTOR3 position; 

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

o, en caso de que se supone que es un constructor,

ClassName::ClassName(D3DXVECTOR3 p) : position(p) 
{ 
} 
Cuestiones relacionadas