Surcharge d'opérateur (opérateur+)
Résolu/Fermé
aure2015
-
Modifié le 20 oct. 2017 à 13:53
Fallentree Messages postés 2309 Date d'inscription mercredi 25 février 2009 Statut Membre Dernière intervention 22 juillet 2019 - 26 oct. 2017 à 09:46
Fallentree Messages postés 2309 Date d'inscription mercredi 25 février 2009 Statut Membre Dernière intervention 22 juillet 2019 - 26 oct. 2017 à 09:46
A voir également:
- Surcharge d'opérateur (opérateur+)
- 0758 quel opérateur - Forum Vos droits sur internet
- A quel opérateur appartient ce numéro ✓ - Forum Opérateurs & Réseaux mobiles
- 0465 quel opérateur belgique ✓ - Forum Vos droits sur internet
- Relevé identité opérateur - Guide
- 0644 quel opérateur ✓ - Forum Mobile
4 réponses
Dalfab
Messages postés
706
Date d'inscription
dimanche 7 février 2016
Statut
Membre
Dernière intervention
2 novembre 2023
101
20 oct. 2017 à 13:50
20 oct. 2017 à 13:50
La 3ième ligne dans le corps du
Il y a beaucoup de fonctions utilisées dans ton
Il faut voir si ça n'est pas une de ces fonctions qui plante.
main()ne doit pas compiler.
Il y a beaucoup de fonctions utilisées dans ton
operator+, dans l'ordre :
- constructeur par copie : 2 fois
-
getRouge()
: 2 fois -
setRouge()
: 1 fois -
getBleu()
: 2 fois -
setBleu()
: 1 fois -
getVert()
: 2 fois -
setVert()
: 1 fois - operateur de copie : 1 fois
- destructeur : 2 fois
Il faut voir si ça n'est pas une de ces fonctions qui plante.
aure2015
Messages postés
93
Date d'inscription
dimanche 11 janvier 2009
Statut
Membre
Dernière intervention
30 mai 2020
5
20 oct. 2017 à 15:04
20 oct. 2017 à 15:04
Oui, c'est bien la ligne trois qui pose problème mais ca compile sans soucis, c'est lors de l'exécution du programme que j'ai un message: segmentation fault. Toutes mes fonctions de base, à savoir mes constructeurs, destructeurs et les get et set sont fonctionnelles, j'ai déjà tout vérifié..
Dalfab
Messages postés
706
Date d'inscription
dimanche 7 février 2016
Statut
Membre
Dernière intervention
2 novembre 2023
101
20 oct. 2017 à 18:50
20 oct. 2017 à 18:50
Le code fournit contient des erreurs, certainement dues à la recopie. Si on place les ';' au bon endroit rien ici ne provoquera un plantage, cela amène des doutes lors de la lecture. Je t'encourage donc à regarder à nouveau les fonctions, lancer le code en debug pour avoir plus d'infos, ou nous fournir plus de données sur ton code;
Ou bien les 3 à fois.
Ou bien les 3 à fois.
Fallentree
Messages postés
2309
Date d'inscription
mercredi 25 février 2009
Statut
Membre
Dernière intervention
22 juillet 2019
208
Modifié le 23 oct. 2017 à 20:45
Modifié le 23 oct. 2017 à 20:45
Bjr, une couleur est comprise entre 0 et 255.
Lorsque que tu construis un opérateur tu ne peux modifier les paramètres dans la fonction...
Il me sembe que les variables sont des constantes ...
Genre A=A+B
Lorsque que tu construis un opérateur tu ne peux modifier les paramètres dans la fonction...
Il me sembe que les variables sont des constantes ...
Genre A=A+B
Fallentree
Messages postés
2309
Date d'inscription
mercredi 25 février 2009
Statut
Membre
Dernière intervention
22 juillet 2019
208
Modifié le 23 oct. 2017 à 20:52
Modifié le 23 oct. 2017 à 20:52
Couleur operator+(Couleur const& a, Couleur const& b)
{
Couleur resultat;
// Calcul des valeurs des attributs de resultat
return resultat;
}
aure2015
Messages postés
93
Date d'inscription
dimanche 11 janvier 2009
Statut
Membre
Dernière intervention
30 mai 2020
5
>
Fallentree
Messages postés
2309
Date d'inscription
mercredi 25 février 2009
Statut
Membre
Dernière intervention
22 juillet 2019
24 oct. 2017 à 12:13
24 oct. 2017 à 12:13
Pas de soucis de ce coté étant donné que j'appelle une nouvelle classe, je ne modifie pas les constantes, J'ai réussi à régler le problème, je ne sais plus trop comment, voici le code tout de même:
Couleur Couleur::operator + (const Couleur &C1) { Couleur C2; char *Buffer= NULL; int Taille=0; C2.setRouge(this->getRouge()+C1.getRouge() < 255 ? this->getRouge()+C1.getRouge() : 255); C2.setVert(this->getVert()+C1.getVert() < 255 ? this->getVert()C1.getVert() : 255); C2.setBleu(this->getBleu()+C1.getBleu() < 255 ? this->getBleu()+C1.getBleu() : 255); Taille= (this->getNom() != NULL ? strlen(getNom()) : 1) + (C1.getNom() != NULL ? strlen(rC.getNom()) : 1) +2; if(this->getNom()!=NULL && C1.getNom()!=NULL) { Buffer= new char[Taille]; sprintf(Buffer,"%s-%s",this->getNom, C1.getNom }; } else { Buffer= new char (stren("Mélange inconnu")) strcpy(Buffer,"Mélange inconnu"); } C2.setNom(Buffer); return C2; }
Dalfab
Messages postés
706
Date d'inscription
dimanche 7 février 2016
Statut
Membre
Dernière intervention
2 novembre 2023
101
>
aure2015
Messages postés
93
Date d'inscription
dimanche 11 janvier 2009
Statut
Membre
Dernière intervention
30 mai 2020
24 oct. 2017 à 18:37
24 oct. 2017 à 18:37
Passer C1 par référence plutôt que par valeur est vraisemblablement ce qui a levé 'temporairement' ton problème (le constructeur par copie n'est plus appelé).
Attention , ton code n'est pas vraiment du C++ (strlen strcpy sprintf c'est du C).
La ligne 24 est certainement fausse.
Attention le nom est géré sous la forme d'un tableau alloué dynamiquement (ce qu'il faut à tout prix éviter à moins d'être expert). Tes constructeurs par copie, opérateur de copie et destructeur et ta fonction setNom() sont des fonctions complexes qui risquent de provoquer d'autre core dumps (voir The Big rule of three).
Pourquoi pas un nom sous la forme d'une std::string qui sait gérer automatiquement les allocations/déallocations nécessaires?
Attention , ton code n'est pas vraiment du C++ (strlen strcpy sprintf c'est du C).
La ligne 24 est certainement fausse.
Attention le nom est géré sous la forme d'un tableau alloué dynamiquement (ce qu'il faut à tout prix éviter à moins d'être expert). Tes constructeurs par copie, opérateur de copie et destructeur et ta fonction setNom() sont des fonctions complexes qui risquent de provoquer d'autre core dumps (voir The Big rule of three).
Pourquoi pas un nom sous la forme d'une std::string qui sait gérer automatiquement les allocations/déallocations nécessaires?
aure2015
Messages postés
93
Date d'inscription
dimanche 11 janvier 2009
Statut
Membre
Dernière intervention
30 mai 2020
5
>
Dalfab
Messages postés
706
Date d'inscription
dimanche 7 février 2016
Statut
Membre
Dernière intervention
2 novembre 2023
24 oct. 2017 à 19:03
24 oct. 2017 à 19:03
Oui, je sais bien que le nom est sous forme d'allocation dynamique, je les gère relativement bien, ça ne me pose pas de problèmes, toutes ces fonctions sont déjà tester et fonctionnent sans problème! C'est justement pour ça que j'utilise la bibliothèque string!
Encore un petit oubli de ; en recopiant le code pour la ligne 24 mais si non elle fonctionne.
Encore un petit oubli de ; en recopiant le code pour la ligne 24 mais si non elle fonctionne.
Fallentree
Messages postés
2309
Date d'inscription
mercredi 25 février 2009
Statut
Membre
Dernière intervention
22 juillet 2019
208
Modifié le 26 oct. 2017 à 10:42
Modifié le 26 oct. 2017 à 10:42
Yo,
Pour l'ajout de couleur, il me semble que cela doit être un Gradiant et pas une simple addition.
"Le calcul additif des couleurs (ou synthèse additive) est le calcul fait par addition des longueurs d'onde de sources lumineuses."
"Système Munsell
Dans cette représentation, les couleurs sont classées selon un réseau cylindrique basé sur 3 attributs perceptifs visuels à savoir :
• La teinte (en anglais hue) associée à la couleur rouge, vert, bleu ...
• La saturation (chroma) associée à l'aspect délavé ou non d'une couleur,
• La luminosité (value) associée à l'aspect sombre ou clair d'une couleur.
La réalisation pratique se fait sous forme d'un album imprimé dont chaque page correspond à une teinte uniforme"
"CIE xyY : propriétés
Mélange de couleur
Le mélange de la couleur C1 de longueur d’onde dominante λ1 et d’une couleur C2 de de longueur d’onde dominante λ2 donne une couleur d’onde C3 de de longueur d’onde dominante λ3"
Source
Pour l'ajout de couleur, il me semble que cela doit être un Gradiant et pas une simple addition.
"Le calcul additif des couleurs (ou synthèse additive) est le calcul fait par addition des longueurs d'onde de sources lumineuses."
"Système Munsell
Dans cette représentation, les couleurs sont classées selon un réseau cylindrique basé sur 3 attributs perceptifs visuels à savoir :
• La teinte (en anglais hue) associée à la couleur rouge, vert, bleu ...
• La saturation (chroma) associée à l'aspect délavé ou non d'une couleur,
• La luminosité (value) associée à l'aspect sombre ou clair d'une couleur.
La réalisation pratique se fait sous forme d'un album imprimé dont chaque page correspond à une teinte uniforme"
"CIE xyY : propriétés
Mélange de couleur
Le mélange de la couleur C1 de longueur d’onde dominante λ1 et d’une couleur C2 de de longueur d’onde dominante λ2 donne une couleur d’onde C3 de de longueur d’onde dominante λ3"
Source