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 Réponses :
en C ++, vous devez qualifier votre fonction code> code> avec le nom de la classe: p>
Aussi de @ Pubby8's Réponse Aussi, C ++ ne passe pas par référence Par défaut, de sorte que si void YourClassNameElere :: Position (D3DXVector3 Position) Code> P>
Ceci est un pointeur, pas une référence, vous devez donc utiliser
this-> position code> (ou envisagez d'utiliser des noms de paramètres qui ne sont pas Membres de la classe Shadow - J'aime utiliser la trailing
_ code> sur mes membres de la classe). P>
d3dxvector3 code> est un type compliqué que vous copierez beaucoup de données. Envisagez de le transmettre comme
const d3dxvector3 et position code> à la place. P>
Il s'agit d'un pointeur fort> contenant l'adresse de l'objet.
D3DXVECTOR3 position; void YourClassNameHere::Position(D3DXVECTOR3 position) { (*this).position = position; }
@ 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.
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)
{
}
Ê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