C++ et QT4...Conversion de type?? [debutant][résolu] - C++ - Programmation
Marsh Posté le 18-10-2007 à 11:10:15
Code :
|
En fait, cette méthode ne fonctionne pas, mais celle-ci fonctionne :
Code :
|
Pourquoi?
Marsh Posté le 18-10-2007 à 13:28:43
Salut,
Dans ton premier post, tu passais ton float, et pas le QString que tu venais de créer donc tu ne risquais pas d'aller bien loin.
Dans ton 2nd post:
> le premier bout de code fonctionne (dans le sens ça compile), mais tu fais une division d'entier, donc ton rapport ne sera jamais le bon
> Le second est l'équivalent du premier, sauf pour la création du rapport qui sera bon vu que tu passes l'une des opérandes en flottant.
Mais foin de tout ça, tu as plus simple, et tu peux faire cette fonction en une ligne avec QString::number.
Marsh Posté le 18-10-2007 à 15:17:38
Hop :
- Le premier message, l'erreur est une faute de frappe, j'ai mal édité par la suite...
- Merci beaucoup pour ton indication, ça marche maintenant même si mon code est pas aussi simple que ton indication :
Code :
|
Merci beaucoup en tout cas!
Marsh Posté le 18-10-2007 à 15:26:41
Là encore, tu fais des divisions entières...
Ce que je voulais dire, c'est que tu pouvais te simplifier la vie; ça reste valable, même avec la manip sur la géométrie:
Code :
|
(Et je ne vois pas pourquoi tu as besoin de 2 ratio?)
Le cast vers l'entier pour obtenir x est juste un troncage; si tu veux un arrondi, regarde la ref de cmath.
Edit: correction.
Marsh Posté le 23-10-2007 à 17:44:46
wof le static_cast. float(num1) ça le fait pareil. Pas la peine de branler la nouille en float pour ensuite faire du double ...
Marsh Posté le 23-10-2007 à 17:56:51
Je sais
Mais tu m'excuseras d'utiliser les cast C++ sur les forums C++: même si c'est plus verbeux, ça force les débutants qui lisent le code à se poser la question type "c'est quoi ce cast?" et éventuellement approfondir la réponse et découvrir les autres. Et si je le fais ainsi, c'est parce que j'ai déjà eu le cas de débutant qui font des cast C sur des pointeurs, et qui demande ce que c'est qu'un dynamic_cast etc...
Je pars du principe que si je pose du code à priori pour débutant, j'essaie (je dis pas que j'y arrive tout le temps, loin de là) de faire du code propre.
Marsh Posté le 23-10-2007 à 18:34:26
pas d'accord. chaque fois que tu peux éviter un cast, il faut le faire. Sinon tu formes juste des gens à cacher leurs problèmes derrière un cast "tiens je vais essayer de caster"
Marsh Posté le 23-10-2007 à 18:41:07
Ok, mais comment tu évites le premier cast alors? (Dans l'optique de le faire en 2 lignes comme il l'a fait)
Chez moi, int/int ça ne donne jamais le vrai ratio (après j'ai peut-être raté quelque chose).
Marsh Posté le 24-10-2007 à 12:19:38
Comment stp?
Sérieux, je vois pas où tu veux en venir Je doute pas que tu ais raison, mais je ne te suis pas ici
Marsh Posté le 27-10-2007 à 17:55:40
Taz a écrit : wof le static_cast. float(num1) ça le fait pareil. Pas la peine de branler la nouille en float pour ensuite faire du double ... |
Marsh Posté le 27-10-2007 à 18:46:56
je pense que on veut en venir là :
Code :
|
tu utilises le constructeur de float pour construire un float à partir de num1.
Ensuite 1000.0 c'est un double, 1000.0f c'est un float
Marsh Posté le 27-10-2007 à 19:22:38
Merci
Ok pour le second point, je l'ignore trop souvent (la preuve...)
Pour le premier, je vois pourtant souvent que cette construction, bien que valide, devrait être évitée en C++. Je retrouve des liens à ce sujet dès que possible je dois partir vite là
Marsh Posté le 29-10-2007 à 09:07:44
IrmatDen a écrit : Pour le premier, je vois pourtant souvent que cette construction, bien que valide, devrait être évitée en C++. Je retrouve des liens à ce sujet dès que possible je dois partir vite là |
Ca doit être une raison fracassante pour que tu t'en souviennes aussi bien.
Marsh Posté le 29-10-2007 à 09:45:00
IrmatDen a écrit : Merci |
le typecasting by construction c'est quadn même l'idiome de base du langaeg hein.
Les gens qui disent "éviter" ça ne comrpennent rien au langage ou alors ne savent pas ce que ca veut dire
Marsh Posté le 29-10-2007 à 14:10:55
Bon en vrac:
> http://forum.hardware.fr/hfr/Progr [...] 3049_1.htm : 3 court messages, je ne fais pas les citations qui vont avec vu le peu de messages;
> https://www.securecoding.cert.org/c [...] tyle+casts : pas d'explication donnée, mais considéré comme mauvaise pratique (tout au moins dans le contexte de je sais pas quelle certif...)
> http://www.informit.com/guides/con [...] m=134&rl=1 : l'exemple est plus tordu et l'utilisation des cast C++ y est apparemment normal. Ceci dit, voici l'intro:
Citation : Originally, the C++ standardization committee wanted to deprecate C-style casting, thereby enforcing the use of the new cast operators exclusively. However, because C-style casts are widely used in legacy code and because many C++ compilers serve as C compilers, the committee decided against doing so. That said, C++ programmers are encouraged to use the new cast operators. |
> http://forum.hardware.fr/hfr/Progr [...] 2816_1.htm (suivre les réponses de ++fab en particulier)
> http://web.mit.edu/merolish/ticpp/ [...] l#Index808 :
Citation : A static_cast is used for all conversions that are well-defined. These include "safe" conversions that the compiler would allow you to do without a cast and less-safe conversions that are nonetheless well-defined. The types of conversions covered by static_cast include typical castless conversions, narrowing (information-losing) conversions, forcing a conversion from a void*, implicit type conversions, and static navigation of class hierarchies |
Et comme je sais en savoir nettement que vous et qu'eux, ben, j'essaie de m'appliquer. Est-ce que vous utiliseriez (j'aimerais qu'on reste sur ce cas particulièrement basique pour restreindre le débat) le casting C pour sauver quelques petites frappes de clavier dans un contexte que vous considérez comme sûr?
Marsh Posté le 18-10-2007 à 10:56:58
Bonjour,
J'ai une question qui va surement vous paraître tout bête mais je coince dessus
Voila mon code (la partie intéressante) :
A la compilation l'erreur : "no matching fonction for call to 'QPushButton::setText(&float)'" a lieu au niveau du setText.
On a, pour information, num1>num2 et 0<rapport<1...
Je pense que c'est un problème de conversion de type...mais la fonction sprintf devrait traiter normalement ma variable rapport même si c'est un float même si là, apparemment, la conversion en QString ne se fait pas.
Message édité par Joker28 le 23-10-2007 à 17:41:49