2010-11-03 7 views
1

Voici mon problème. J'ai un constructeur qui fait une couleur de 4 flotteurs allant de 0 à 1. Je veux ajouter la compatibilité avec 0 à 255 int donc j'ai un autre constructeur comme ceci:problème avec int pour flotter

AguiColor::AguiColor(int r, int g, int b, int a) 
{ 
double num = 1.0f/255.0f; 
    AguiColor((float)(r * num), (float)(g * num), (float)(b * num), (float)(a * num)); 

} 

Toutefois, cela ne fonctionne pas. Les composants float rgba deviennent des nombres étranges. Quel est le probleme avec ca?

Merci

+0

Qu'entendez-vous par "nombres étranges"? C'est à dire. Quels sont les chiffres que vous attendez, et quels numéros obtenez-vous? – AndyG

+0

Pourquoi ne pas simplement fournir deux constructeurs? –

+0

@Ed: Basé sur "J'ai un autre constructeur" et le fait qu'il reçoit des données de poubelle, pas un débordement de pile, je suis sûr qu'il a deux constructeurs. –

Répondre

4

C++ 03 ne prend pas en charge la délégation du constructeur (a/k/a Enchaînement). Lorsque vous appelez cet autre constructeur, de style Java, il crée un objet temporaire, sans affecter l'objet en cours de construction.

Cela peut le résoudre, mais n'est pas aussi efficace que l'initialisation directe des membres.

AguiColor::AguiColor(int r, int g, int b, int a) 
{ 
    double num = 1.0f/255.0f; 
    *this = AguiColor((float)(r * num), (float)(g * num), (float)(b * num), (float)(a * num)); 
} 
+0

qui a fait l'affaire! – jmasterx

+0

serait-ce créer une fuite de mémoire, dois-je supprimer cela, d'abord? – jmasterx

+0

Non, il n'y a pas de fuite de mémoire. –