Bonjour,

J'ai utilisé le code de Laurent Gomila afin de m'entrainer dans la création d'un moteur 3D, seulement un opérateur surchargé dans la classe Matrix4 entraine un warning:

warning C4717: 'Asce::CMatrix4::operator()'*: récurrent sur tous les chemins d'accès de contrôle, la fonction entraînera un dépassement de capacité de la pile d'exécution
Voilà l'opérateur incriminé :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
inline const float& CMatrix4::operator ()(std::size_t i, std::size_t j) const
{
    return operator ()(i, j);
}
Et le code complet de la classe.

Si j'ai bien compris cet opérateur appelle l'opérateur suivant qui lui donne une référence vers les données :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
inline CMatrix4::operator const float*() const
{
    return &a11;
}
et ensuite au lieu d'appeler celui-ci il se rappelle lui-même :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
inline float& CMatrix4::operator ()(std::size_t i, std::size_t j)
{
    return operator float*()[i + 4 * j];
}
Je ne vois pas du tout comment corriger le problème, si vous avez une proposition n'hésitez pas.

Merci d'avance.