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

 C++ Discussion :

Incohérence à la conversion de int en float


Sujet :

C++

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 28
    Par défaut Incohérence à la conversion de int en float
    Salut,

    J'ai le problème suivant en réalisant un jeu avec SDL et OpenGL :

    Voici mon code (sans les fprintf qui m'ont permis de déceler le problème):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    int perx = perso->getCenterX();
    int pery = perso->getCenterY();
     
    Pas * pas = new Pas();
     
    pas->x = (float)perx;
    pas->y = (float)pery;
    Lorsque je regarde la valeur de perx et pery après initialisation, j'obtiens 192 et 192 mais lorsque je les transforme en float ils deviennent 0 et 1080573952, ce qui bien entendu fausse tout mon programme.

    Je ne comprends pas d'où viennent ces valeurs aberrantes sinon que ma fonction getCenterX() ou Y est la suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int Sprite::getCenterX()
    {
    	return int(_rect.x + (_clip.w/2));
    }
    _rect et _clip étant des SDL_Rect dont les membres sont en Sint16... J'imagine que c'est là qu'a lieu le problème.

    Comment puis-je convertir ces types sans aberrations ?

  2. #2
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4
    Par défaut
    - Oublies les fprintf() et co.
    - Oublies les casts C, passe aux casts C++
    - Ton utilisation d'allocations et donc de pointeurs est-elle nécessaire ?
    - Ton perso ne sait-il pas marcher par lui-même ? Il a besoin d'une classe Pas ? Tu peux m'expliquer stp.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 28
    Par défaut
    Comme tu l'as remarqué, je débute en C++ :

    Désolé d'être resté absent si longtemps : j'ai du me remettre à mes boulots "non-développeurs".

    Pour mon bug c'est néanmoins résolu : il venait strictement du "fprintf" où j'essayais de lire un float avec "%i"...

    La struct "Pas" correspondait à une tentative d'implémentation d'algorithme A*,
    que j'ai abandonnée depuis.

    Sinon, puisqu'on en parle, quelle est la différence entre les cast C et C++ ?

  4. #4
    Membre Expert
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Par défaut
    Les casts C++ en _cast<T> sont beaucoup plus safe

  5. #5
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 393
    Par défaut
    Les casts C-style sont trop permissifs, permettant de caster tout en n'importe quoi.
    Ils sont une source majeure de perte de const-correctness, alors que les casts C++ autres que const_cast<> l'interdisent.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

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

Discussions similaires

  1. Conversion int vers Float
    Par roro8 dans le forum Développement de jobs
    Réponses: 5
    Dernier message: 08/02/2010, 11h38
  2. conversion int to float ->resultat erroné
    Par firejocker dans le forum MFC
    Réponses: 5
    Dernier message: 03/04/2006, 14h41
  3. Conversion de varchar en float possible ?
    Par toyyo dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 22/12/2005, 17h05
  4. [Conversion]convertir int[] en bytes[]
    Par tony_big_guy dans le forum Langage
    Réponses: 5
    Dernier message: 02/05/2005, 15h47
  5. [C++] Conversion de int en char* ou SetDlgItemText()
    Par lastcheper dans le forum MFC
    Réponses: 3
    Dernier message: 11/04/2005, 17h46

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