DakM a raison, il vaut mieux utiliser le casts "à la C++" : static_cast, reinterpret_cast, ...
Dans ton cas, ta manipulation converti un pointeur vers un entier en un pointeur vers un double. Quand tu dé-références celui-ci, le programme interprète la valeur pointée, qui est un entier, comme un double (tu fais l'équivalent du reinterpret_cast). Or ce n'est pas ce que tu veux : tu veux convertir ton entier en double. Il faut que tu dé-références ton pointeur, puis ensuite que tu convertisse la valeur :
c->addEltPile(new Constante(QString::number(sin((double)*first->getFirstMember())).replace('.',',')));
Comme on te l'as dit, c'est un cast "à la C". Tu n'aurais pas eu de problème si tu avais utilisé les casts "à la C++" puisque le compilateur t'aurais prévenu que tu essayes de convertir un pointeur en un pointeur vers un autre type qui n'est pas compatible.
En effet, ça compile :
c->addEltPile(new Constante(QString::number(sin(static_cast<double>(*first->getFirstMember()))).replace('.',',')));
mais ça non :
c->addEltPile(new Constante(QString::number(sin(*static_cast<double*>(first->getFirstMember()))).replace('.',',')));
Partager