PDA

Visualizza la versione completa : [c++]Warning


giuseppe500
24-08-2008, 14:07
Ciao.
Sto cercando di togliere i warning dalla mia applicazione.
La maggior parte di questi warning sono del tipo:

c:\programmazione\project\gioco\colladareader.cpp( 151) : warning C4244: '=' : conversion from 'daeDouble' to 'float', possible loss of data



normal[i] = floatArray->getValue()[m_nIndex*3+i];


dove normal[i] è un float e l'espressione è un double.
Posso togliere questo warniing mettendo un cast del tipo:



normal[i] =((float) floatArray->getValue()[m_nIndex*3+i]);


è corretto?
Come mi consigliate di risolvere questi warning?
Grazie.

Samuele_70
24-08-2008, 14:23
Sarebbe meglio definire normal[] come double, se possibile.

giuseppe500
24-08-2008, 16:51
il problema è che normal[] deve essere un float ,perchè le opengl usano i float e sono obbligato a convertire.Ma il mio discorso è piu' generale , quando ho un warning di quel tipo ,cosa bisogna fare?
meglio un cast , meglio convertire?
e per convertire che tipi di funzione è meglio usare?
esiste una tabella di funzioni per la conversione?
Grazie.

MItaly
24-08-2008, 16:56
Di solito un normale cast va bene.

MacApp
24-08-2008, 21:44
TRattandosi di C++, meglio usare static_cast
;-)

MItaly
24-08-2008, 21:49
Che è giusto un pelino verboso... :( quando non ho a che fare con classi personalmente preferisco il vecchio cast C.

MacApp
25-08-2008, 03:32
Originariamente inviato da MItaly
Che è giusto un pelino verboso... :( quando non ho a che fare con classi personalmente preferisco il vecchio cast C.
E' proprio per la sua non verbosità ed "ambigua" semantica (che assume in C++ a causa della possibilità di sovrapporre gli operatori di casting), che in C++ sono state aggiunte static_cast, dynamic_cast e reinterpret_cast. E' vero sono verbose ma più esplicite a livello semantico: meno bug, meno crash, meno ore di debug, programmi più efficienti, meno costosi ecc..
Meglio la verbosità, non credi?
;-)

XWolverineX
25-08-2008, 08:53
Stai sviluppando un loader per i file collada? L'ho fatto anche io! MI piacerebbe confrontare!

MItaly
25-08-2008, 11:42
Originariamente inviato da MacApp
E' proprio per la sua non verbosità ed "ambigua" semantica (che assume in C++ a causa della possibilità di sovrapporre gli operatori di casting), che in C++ sono state aggiunte static_cast, dynamic_cast e reinterpret_cast. E' vero sono verbose ma più esplicite a livello semantico: meno bug, meno crash, meno ore di debug, programmi più efficienti, meno costosi ecc..
Meglio la verbosità, non credi?
;-)
Converrai con me però che finché si tratta di convertire long in double e cose del genere (conversioni tra scalari, insomma) il vecchio cast C va più che bene.

MacApp
25-08-2008, 12:39
Originariamente inviato da MItaly
Converrai con me però che finché si tratta di convertire long in double e cose del genere (conversioni tra scalari, insomma) il vecchio cast C va più che bene.
No.

Loading