8
votes

Qu'est-ce qu'une fonction membre non statique?

On me dit que je ne peux pas utiliser le mot-clé "Ceci" dans une fonction de classe. Je viens de C # et je suis habitué à ce travail, mais le compilateur me dit qu'il ne peut être utilisé que dans des fonctions membres non statiques.

D3DXVECTOR3 position;

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


3 commentaires

Êtes-vous sûr qu'il a fonctionné en C #? En C #, une «fonction de classe» s'appelle une «méthode statique», et vous ne pouvez pas utiliser «ceci» dans ceux non plus?


Ouais je l'ai fait tout le temps de faire référence à une variable de classes dans le constructeur ou est le constructeur différent?


Peut-être devriez-vous montrer la classe cette méthode appartient à - cela pourrait aider à clarifier ce que vous faites


3 Réponses :


16
votes

en C ++, vous devez qualifier votre fonction avec le nom de la classe:

void YourClassNameElere :: Position (D3DXVector3 Position)

Aussi de @ Pubby8's Réponse Ceci est un pointeur, pas une référence, vous devez donc utiliser this-> position (ou envisagez d'utiliser des noms de paramètres qui ne sont pas Membres de la classe Shadow - J'aime utiliser la trailing _ sur mes membres de la classe).

Aussi, C ++ ne passe pas par référence Par défaut, de sorte que si d3dxvector3 est un type compliqué que vous copierez beaucoup de données. Envisagez de le transmettre comme const d3dxvector3 et position à la place.


0 commentaires

18
votes

Il s'agit d'un pointeur fort> contenant l'adresse de l'objet.

D3DXVECTOR3 position;

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


2 commentaires

@ Andrécaron Heh, n'a pas remarqué. J'ai édité d'inclure les changements de Markb.


@ Andrécaron sauf que nous ne le savons pas, car il ne nous a pas donné de contexte.



4
votes

non seulement est la position code> une fonction libre (non associée à une classe) comme vous l'avez écrite, mais ceci code> est également un pointeur, pas une référence.

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


0 commentaires