|
Publicité ' | ||||||||||||||||||||||
|
|
#1 | ||
|
Membre régulier
![]() Inscription : février 2006 Messages : 336 ![]() |
Bonjour,
J'ai une classe Point4 qui ressemble à ceci: Code :
Code :
Point4<float> pointTransformed = (getLightProjectionMatrix() * getLightViewMatrix() * Point4<float>(0.0, 0.0, -0.2, 1.0)) / 2.0f + 0.5f; Par contre le "+ 0.5f" ne fonctionne pas comme je voudrais (ajouter 0.5f à X, Y, Z et W). C'est ma faute: j'ai oublié de définir l'opérateur d'addition dans ma classe Point4. Ce que je ne comprends pas: * Il ne râle pas à la compilation ! * Pire: Il me transforme mon " + 0.5f" par "+ Point4<float>(0.5f)" à la compilation/exécution. En effet, j'ai pu voir en debug qu'il appel le constructeur de Point4<float> avec 0.5f. Comment ose t-il appeler un constructeur sans que je lui demande ? Je trouve cela très perturbant. Y a-t-il moyen d'empêcher cela ? Comment s'appel cette façon de faire du compileur afin de trouver plus d'info sur Internet ? Merci d'avance. EDIT: Oups, je voulais mettre mon message dans le forum consacré au langage C++ et pas dans Visual c++ que je n'utilise pas. |
||
|
|
00
|
|
|
#2 |
|
Expert Confirmé Sénior
![]() Paul BacelarDéveloppeur informatique Inscription : février 2005 Messages : 2 651 ![]() |
Le compilateur ne s'autorise jamais rien. S'il le fait, c'est que vous, directement ou indirectement, lui avez indiqué de le faire.
Vous auriez peut-être négligemment oublié de nous faire par d'un opérateur de cast implicite, non ?
|
|
|
00
|
|
|
#3 | ||
|
Membre régulier
![]() Inscription : février 2006 Messages : 336 ![]() |
J'ai volontairement supprimé les opérateurs de multiplication et division ainsi que les fonctions de ma classe Point4. J'ai aussi ces opérateurs (il ne passe pas dedans quand je suis en debug):
Code :
1) Appel du constructeur pour créé un point à partir de +0.5f 2) Appel du constructeur pour créé le point 0.0, 0.0, -0.2, 1.0 3) Multiplication des deux matrices (light projection & light view) 4) Multiplication de la matrice de l'étape 3 par le point 0.0, 0.0, -0.2, 1.0 5) Division par 2.0f de mon point calculé à l'étape 4 6) Addition de 0.5f entre mon point de l'étape 5 et celui de l'étape 1 |
||
|
|
00
|
|
|
#4 |
|
Expert Confirmé Sénior
![]() Paul BacelarDéveloppeur informatique Inscription : février 2005 Messages : 2 651 ![]() |
Je n'avais pas vu les paramètres optionnels du constructeur.
Et le comportement est donc maintenant, pour moi, tout à fait naturel. Si le comportement ne vous convient pas, redéfinissez l'opérateur + avec un float. |
|
|
00
|
Copyright © 2000-2013 - www.developpez.com