IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage C++ Discussion :

Warning lors de la surcharge de l'opérateur ()


Sujet :

Langage C++

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 10
    Par défaut Warning lors de la surcharge de l'opérateur ()
    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.

  2. #2
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    J'ai pourtant l'impression que le message d'erreur est clair. Si tu regardes ton code, la fonction "inline const float& CMatrix4::operator ()(std::size_t i, std::size_t j) const" va s'auto appeler jusqu'à exploser la pile d'appel.

    Il te faut modifier le code de cette fonction afin de briser cette récurrence infinie.
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 10
    Par défaut
    Le message d'erreur est tout à fait clair.

    J'ai déjà essayé de modifier la fonction comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    inline const float& CMatrix4::operator ()(std::size_t i, std::size_t j) const
    {
        return operator float*()[i + 4 * j];
    }
    Mais le compilateur retourne l'erreur suivante :
    error C2662: 'CMatrix4::operator float *'*: impossible de convertir un pointeur 'this' de 'const CMatrix4' en 'CMatrix4 &'

  4. #4
    Membre chevronné

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2007
    Messages
    373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2007
    Messages : 373
    Par défaut
    Essaye :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    inline const float& CMatrix4::operator ()(std::size_t i, std::size_t j) const
    {
        return operator const float*()[i + 4 * j]; // Mettre le const ici
    }

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 10
    Par défaut
    Ça fonctionne, merci beaucoup.

  6. #6
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Au fait, quand tu as la réponse à ta question, il ne faut pas modifier le titre du post pour mettre [Résolu] mais il faut utiliser le bouton en bas
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Surcharge de l'opérateur new
    Par :Bronsky: dans le forum C++
    Réponses: 17
    Dernier message: 27/10/2010, 21h33
  2. JDBC warning lors de la compilation
    Par kichemans dans le forum JDBC
    Réponses: 5
    Dernier message: 27/12/2005, 15h40
  3. Warning lors la creation d'une classe
    Par addack dans le forum Langage
    Réponses: 11
    Dernier message: 02/11/2005, 12h06
  4. Réponses: 15
    Dernier message: 25/01/2005, 16h51
  5. Warnings lors de la compilation
    Par polo54 dans le forum C
    Réponses: 5
    Dernier message: 07/02/2003, 09h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo