2010-11-06 6 views
0

J'ai une classe appelée PointF et il a un constructeur qui prend un Point, et je continue à recevoir des "avertissements possibles de perte de données". Comment est-ce que je peux montrer que mon intention est en fait de faire une valeur de float dans un int, parmi d'autres tings? J'ai essayé static_cast et (float) mais ils n'ont pas réparé l'avertissement.corrige correctement la conversion et la perte des avertissements de données?

Par exemple:

int curPos = ceil(float(newMouseY/font.getLineHeight())) ; //float to int 

Et

outputChars[0] = uc; //converting from size_t to char 
+1

Veuillez ajouter un exemple de code à votre question. –

+0

@ Oli Charlesworth voir modifier – jmasterx

Répondre

1

Un casting devrait faire l'affaire; qui dit « faire explicitement ce type dans ce type », qui est généralement assez stupide pour un compilateur pour avertir pour:

int curPos = static_cast<int>(ceil(float(newMouseY/font.getLineHeight()))); 

Ou:

outputChars[0] = static_cast<char>(uc); 

Assurez-vous que vous jette essayé étaient semblable à celle . Vous dites: «J'ai essayé ... (float) » qui me porte à croire que vous avez essayé quelque chose comme ceci:

int curPos = (float)(ceil(float(newMouseY/font.getLineHeight()))); 

Ce qui ne fait rien. Le type de l'expression est déjà un float, qu'est-ce qui le ferait au même type? Vous devez le convertir vers le type de destination. Gardez à l'esprit que les moulages doivent généralement être évités. Dans votre premier extrait, la distribution est judicieuse car lorsque vous quantifiez quelque chose, vous devez nécessairement supprimer des informations.

Mais votre deuxième distribution ne l'est pas. Pourquoi est-ce que uc a size_t en premier lieu? Que se passe-t-il lorsque la distribution fait déposer des informations? Est-ce vraiment une bonne idée?

+0

qui ne se produirait jamais si: \t si (uc <= 0x7f) { \t \t \t outputChars [0] = static_cast (uc); \t \t \t retour 1; \t } – jmasterx

+0

Son pour Unicode, – jmasterx

+0

@Milo: D'accord, la vérification est une solution valide, bien que '0x7f' soit un nombre assez magique. – GManNickG

0

Vous devez diffuser le résultat de ceil, de préférence avec un static_cast.

0

vous pourriez avoir à utiliser un casting explicite, à savoir

int CURPOS = int (Ceil (...));

0

Vous devez convertir votre variable pour en changer normalement le bon type. Et si vous essayez de convertir size_t en char, alors vous essayez d'enregistrer 4 bytes en 1 byte, les données perdues est une chose normale de cette façon.

Questions connexes