Précédent   Forum du club des développeurs et IT Pro > C et C++ > C++ > Langage
Langage Langage C++, Programmation Orientée Objet, Templates, etc. Avant de poster : FAQ C++
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 26/02/2013, 13h15   #1
Th0ms0n
Invité de passage
 
Homme
Étudiant
Inscription : février 2013
Messages : 25
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : février 2013
Messages : 25
Points : 0
Points : 0
Par défaut [Aide] Design Pattern Composite

Bonjour,
Je travail sur un projet étudiant et je dois réaliser un programme où l'on dessines des formes 2D (sur 3 "fenêtres", une par dimension) qui sont rendus en 3D (dans une 4e fenêtre) via une bibliothèque.
Je vous met mon Diagramme de Classes :
je me heurte à un problème d'héritage pour le design pattern composite (Scene et Objet héritent de Composite) et à l'utilisation des QVector, l'erreur est liée au fait que la classe héritée Scene contient un QVector<Composite> (Composite n’étant jamais instanciée) et que lors de la construction par copie de Scene on copie le QVector de cette façon :

Code :
1
2
3
4
5
Scene::Scene(const Scene & _scene)
    : Composite(_scene.getNom())
{
    objetsScenes=_scene.getObjetsScenes();
}
on a pourtant bien surchargé l’opérateur = de Scene :

Code :
1
2
3
4
5
Scene& Scene::operator=(const Scene & _scene)
{
    objetsScenes = _scene.getObjetsScenes();
    return *this;
}
objetsScenes étant le QVector<Composite>

On obtient les erreurs suivantes :
Code :
1
2
3
4
scene.cpp:14: instantiated from here "objetsScenes=_scene.getObjetsScenes();"
qvector.h:509: erreur : no matching function for call to 'Composite::Composite()'
composite.h:9: candidates are: Composite::Composite(const Composite&)
composite.h:8:                 Composite::Composite(QString)
Merci.
Th0ms0n est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/02/2013, 13h26   #2
leternel
Membre Expert
 
Homme Pierre
Ingénieur développement logiciels
Inscription : juin 2007
Messages : 1 175
Détails du profil
Informations personnelles :
Nom : Homme Pierre
Localisation : France

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : juin 2007
Messages : 1 175
Points : 2 476
Points : 2 476
tu n'as simplement pas de constructeur "par défaut" (sans arguments) dans Composite
__________________
Mes principes de bases du codeur qui veut pouvoir dormir:
  • Une variable de moins est une source d'erreur en moins.
  • Un pointeur de moins est une montagne d'erreurs en moins.
  • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
  • La plus sotte des questions est celle qu'on ne pose pas.
leternel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/02/2013, 13h44   #3
Th0ms0n
Invité de passage
 
Homme
Étudiant
Inscription : février 2013
Messages : 25
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : février 2013
Messages : 25
Points : 0
Points : 0
En effet, merci.
Maintenant j'ai une erreur dans mes constructeur par copie des héritiers de Objet (Pave, Cylindre, Sphere) :
Code :
1
2
3
4
5
6
7
Pave::Pave(const Pave & _pave)
    : Objet(_pave.getNom())
{
    this->hauteur = _pave.getHauteur();
    this->largeur = _pave.getLargeur();
    this->profondeur = _pave.getProfondeur();
}
Code :
1
2
3
 
cylindre.cpp:12: erreur : passing 'const Cylindre' as 'this' argument of 'double Cylindre::getHauteur()' discards qualifiers
cylindre.cpp:13: erreur : passing 'const Cylindre' as 'this' argument of 'double Cylindre::getRayon()' discards qualifiers
merci pour l'aide.
Th0ms0n est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 26/02/2013, 16h20   #4
r0d
Expert Confirmé Sénior
 
Inscription : août 2004
Messages : 3 665
Détails du profil
Informations personnelles :
Localisation : Belgique

Informations forums :
Inscription : août 2004
Messages : 3 665
Points : 4 421
Points : 4 421
Bonjour,

à vue de nez, je dirais que les fonctions membres getHauteur(), getLargeur() et getProfondeur() n'ont pas le qualificateur 'const', qu'ils devraient avoir.
r0d est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/02/2013, 17h12   #5
Th0ms0n
Invité de passage
 
Homme
Étudiant
Inscription : février 2013
Messages : 25
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : février 2013
Messages : 25
Points : 0
Points : 0
En effet, encore une fois.
Merci !
Th0ms0n est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 19h16.


 
 
 
 
Partenaires

Hébergement Web