IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

probleme heritage et constructeur


Sujet :

C++

  1. #1
    Membre éclairé Avatar de guitariste
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    245
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 245
    Par défaut probleme heritage et constructeur
    salut tout le monde . voila je fais un tetris et pour cela j'ai crée une classe forme et des des sous classe telles que barre cube etc...
    voila la definition du constructeur de la classe forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    Forme::Forme(int color):m_color(color)
    {
    	 m_nom ="piece"; 
     
    	 m_posx = 4;
    	 m_posy=0;
    	 m_etat= 1;
    	mov_forme_valid = true;
     
     
     
     
    	    Cube cube_0(m_posx,m_posy,m_color,0),cube_1(m_posx,m_posy,m_color,1),cube_2(m_posx,m_posy,m_color,2),cube_3(m_posx,m_posy,m_color,3);
    		m_cube.push_back(cube_0);
    		m_cube.push_back(cube_1);
    		m_cube.push_back(cube_2);
    		m_cube.push_back(cube_3);
     
     
    }
    et voila la declaration de la classe Barre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #ifndef def_barre
    #define def_barre
    #include "Forme.h"
     
    class Barre : public Forme
    {
    public :
    	Barre(int color);
     
    };
    #endif
    et enfin le constructeur de Barre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Barre::Barre(int color):Forme(color)
    {
    	    m_cube[1].m_positionx = m_posx; 
    		m_cube[1].m_positiony = m_posy; 
    		m_cube[2].m_positionx = m_posx; 
    		m_cube[2].m_positiony = m_posy + 1;
    		m_cube[3].m_positionx = m_posx; 
    		m_cube[3].m_positiony = m_posy + 2;
    		m_cube[4].m_positionx = m_posx; 
    		m_cube[4].m_positiony = m_posy + 3;
    }
    voila mais le probleme c'est quand je veux creer un objet de type Barre il me dit que la classe n'a aucun constructeur !!!
    c'est bizar ....pourtant il ya un constructeur !!

  2. #2
    Membre expérimenté
    Profil pro
    Dev
    Inscrit en
    Décembre 2007
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dev

    Informations forums :
    Inscription : Décembre 2007
    Messages : 191
    Par défaut
    tu n'as qu'un constructeur qui demande un paramètre couleur. Comment crées-tu ton objet ?

    Quel est le message d'erreur exact que tu obtiens ? ce n 'est pas plutôt "la classe n'a aucun constructeur *par défaut* " ?

  3. #3
    Membre éclairé Avatar de guitariste
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    245
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 245
    Par défaut
    salut
    par exemple si je fais cela
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Barre * piece = new Barre(bleu);
    j'ai une erreur de ce type
    error C2514: 'Barre' : la classe n'a aucun constructeur

  4. #4
    Membre expérimenté
    Profil pro
    Dev
    Inscrit en
    Décembre 2007
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dev

    Informations forums :
    Inscription : Décembre 2007
    Messages : 191
    Par défaut
    ah oui. C'est peut être un problème d'include de .h dans le fichier où tu crées ta Barre ?

  5. #5
    Invité
    Invité(e)
    Par défaut
    Ce n'est pas plutôt ton type "Cube" qui n'a pas de default constructor? Tu peux poster le message d'erreur entier?

    [EDIT: Oups, pardon, des messages ont été postés entre temps... oubliez mon poste!]

    Carl

  6. #6
    Membre éclairé Avatar de guitariste
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    245
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 245
    Par défaut
    non j'ai bien mis un
    dans ce fichier !!

  7. #7
    Membre éclairé Avatar de guitariste
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    245
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 245
    Par défaut
    il faut noter c'est que je peux creer un objet de type forme sans probleme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    piece_suivante = new  Forme(bleu);
    voila le message d'erreur
    c:\documents and settings\peter\mes documents\visual studio 2005\projects\tetris\tetris\jeu.cpp(26) : error C2514: 'Barre' : la classe n'a aucun constructeur
    c:\documents and settings\peter\mes documents\visual studio 2005\projects\tetris\tetris\cube.h(20) : voir la déclaration de 'Barre'

  8. #8
    Membre expérimenté
    Profil pro
    Dev
    Inscrit en
    Décembre 2007
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dev

    Informations forums :
    Inscription : Décembre 2007
    Messages : 191
    Par défaut
    Citation Envoyé par guitariste Voir le message
    il faut noter c'est que je peux creer un objet de type forme sans probleme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    piece_suivante = new  Forme(bleu);
    voila le message d'erreur
    c:\documents and settings\peter\mes documents\visual studio 2005\projects\tetris\tetris\jeu.cpp(26) : error C2514: 'Barre' : la classe n'a aucun constructeur
    c:\documents and settings\peter\mes documents\visual studio 2005\projects\tetris\tetris\cube.h(20) : voir la déclaration de 'Barre'

    Je crois que 5hdumat a tapé près . Il y a quoi ligne 20 du cube .h ?

  9. #9
    Membre éclairé Avatar de guitariste
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    245
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 245
    Par défaut
    salut dans Cube.h
    En fait je declare la classe Barre comme friend a la classe Cube:
    Cube c'est les carrés qui composent les pieces , chaque pieces est composée de 4 Cubes.
    Je suis obligé de faire cela car je dois modifier les composantes de chaque Cube a partir de la classe Forme en generale.

  10. #10
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 296
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 296
    Par défaut
    Donne l'exemple complet et minimal (aka ECM) qui permette de reproduire ton problème -- là c'est trop minimal.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  11. #11
    Membre éclairé Avatar de guitariste
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    245
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 245
    Par défaut
    minimal !! qu'est ce que vous voulez savoir de plus ?

  12. #12
    Invité
    Invité(e)
    Par défaut
    Il nous faudrait au moins les déclarations de toutes les classes qui entrent en jeu.

    Carl

  13. #13
    Membre éclairé Avatar de guitariste
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    245
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 245
    Par défaut
    Salut en fait je cherche une methode avec la quelle je peut creer des pieces aleatoires .Pour le moment j'ai creer deux pointeur de type Forme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Forme * piece_actuelle, * piece_suivante,f(bleu) ;
             piece_actuelle = new  Forme(bleu);
    	 piece_suivante = new  Forme(bleu);
    et a chaque fois qu'une piece se bloque je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
                      piece_actuelle = piece_suivante;
    		            delete piece_suivante;
    		            piece_suivante = new Forme(bleu);
    comme cela ,ca marche mais c'est tjrs la meme piece qui decend.
    voila donc j'ai creer des classe filles telles que Barre (que j'ai deja donné la definition ) : mais quand j'ai voulu la testée .par exemple en faisant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
                      piece_actuelle = piece_suivante;
    		            delete piece_suivante;
    		            piece_suivante = new Barre(bleu);
    c'est la que l'erreur apparait !
    voila...j'espere que j'ai ete clair et si vous avez besoin d'autre choses faites moi signe.
    Merci

  14. #14
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par guitariste Voir le message
    et a chaque fois qu'une piece se bloque je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
                      piece_actuelle = piece_suivante;
    		            delete piece_suivante;
    		            piece_suivante = new Forme(bleu);
    Oups!!! Tu fais pointer "piece_actuelle" et "piece_suivante" sur le même objet, que tu détruis tout de suite après! C'est mal...

    Je crois que ce que tu veux faire, c'est d'abord "delete piece_actuelle;" et ensuite l'affectation depuis "piece_suivante".

    Carl

    PS. Au passage, il aurait été plus facile de voir qu'un objet est partagé entre deux pointeurs si les noms avaient été "p_piece_actuelle" et "p_piece_suivante", mais je sens que Jean-Marc et Screetch vont me découper en pieces_eparses si je reviens là-dessus :-)

  15. #15
    Membre expérimenté
    Profil pro
    Dev
    Inscrit en
    Décembre 2007
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dev

    Informations forums :
    Inscription : Décembre 2007
    Messages : 191
    Par défaut
    Citation Envoyé par guitariste Voir le message
    minimal !! qu'est ce que vous voulez savoir de plus ?

    Si tu veux que plus de personnes puissent essayer de chercher le problème, il faut donner un code *compilable* et *minimal* qui a les memes erreurs. (Pas tout ton ton code, mais ce qu'il faut pour :
    - compiler
    - générer la même erreur que toi
    )

  16. #16
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 296
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 296
    Par défaut
    Citation Envoyé par guitariste Voir le message
    minimal !! qu'est ce que vous voulez savoir de plus ?
    Le strict minimum qui permette malgré tout de compiler ton code.
    Bref.Tu nous ne donnes pas tout => on est obligé de deviner (... comment combler les trous, et pour beaucoup, le comment on comble, chez nous ça compile dans nos têtes ...), ou de laisser tomber (d'où le peu de réponses que tu as eu -- et poster sur un autre forum de débutants ne va pas mieux aider )
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  17. #17
    Membre éclairé Avatar de guitariste
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    245
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 245
    Par défaut
    ok je vois ce que voulez dire .mais vous donner un code compilable me semble tres difficile , vu le nbr des .h et des .cpp que je dois inclure et toute les dependances qu'il ya entres les classes . mais voila je vous donnes les declarations de toutes les classes que j'utilise

    Cube.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    class Cube 
    {
     
    public :
     
     
    	Cube(int x,int y,int color, int index);
    	int  get_positionx();
    	int  get_positiony();
    	void dep_droite(int carte[][12]);
    	void dep_gauche(int carte[][12]);
    	void dep_bas(int carte[][12]);
    	friend class Forme;
    	friend class Barre;
    	friend class Triangle;
    	friend class Carre;
     
     
     
     
    private:
     
         int m_largeur ;
    	 int m_hauteur ;
    	 int m_positionx;
    	 int m_positiony;
         int m_color;
    	 int m_index;
     
     
    };
    Forme.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    class Forme
    {
    public :
     
     
    	Forme( int color);
    	void piv_droite(int carte[][12], SDL_Rect pos);
    	void piv_gauche(int carte[][12], SDL_Rect pos);
    	void dep_droite(int carte[][12], SDL_Rect pos);
    	void dep_gauche(int carte[][12], SDL_Rect pos);
    	void dep_bas(int carte[][12], Forme * piece_actuelle,Forme * piece_suivante);
    	int  get_positionx();
    	int  get_positiony();
    	int  get_color();
    	bool get_mov_valid();
    	void affiche_moi(SDL_Surface * carre ,SDL_Surface *  ecran, SDL_Rect position);
    	void affiche_toi(SDL_Surface * carre ,SDL_Surface *  ecran, SDL_Rect position);
     
    protected:
     
    	std::string m_nom;
     
    	int m_posx;
    	int m_posy;
    	int m_etat;
    	int m_color;
    	std::vector<Cube> m_cube;
    	bool mov_forme_valid;
     
     
    };
    Barre.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    class Barre : public Forme
    {
    public :
    	Barre(int color);
     
    };
    voila j'espere que cela vous donne une petite idée.
    Oups!!! Tu fais pointer "piece_actuelle" et "piece_suivante" sur le même objet, que tu détruis tout de suite après! C'est mal...
    merci 5hdumatin pour le conseil , cela m'a permis de résoudre d'autres problemes qui me prenaient la tete .
    Mais le fonctionnement de delete reste un peu flou pour moi : que fait t'il exactement ? il supprime le pointeur , la memoire pointée ou les deux ?

  18. #18
    Membre éclairé Avatar de guitariste
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    245
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 245
    Par défaut
    salut .
    peut etre que la bonne question est la suivante:
    comment je peux faire un constructeur pour Barre sachant que je veux changer seulement l'initialisation de l'attribut m_cube ?

  19. #19
    Membre expérimenté
    Profil pro
    Dev
    Inscrit en
    Décembre 2007
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dev

    Informations forums :
    Inscription : Décembre 2007
    Messages : 191
    Par défaut
    Citation Envoyé par guitariste Voir le message
    Mais le fonctionnement de delete reste un peu flou pour moi : que fait t'il exactement ? il supprime le pointeur , la memoire pointée ou les deux ?
    La zone de mémoire pointée crée avec new (sauf si le pointeur vaut NULL, auquel cas rien n'est fait). La variable pointeur reste utilisable. Mais tous les pointeurs qui pointaient sur la zone supprimée deviennent invalide et ne doivent surtout pas etre déréférencés.

Discussions similaires

  1. probleme avec mes constructeurs
    Par gene69 dans le forum C++
    Réponses: 8
    Dernier message: 19/10/2006, 20h47
  2. Problème avec le constructeur SAXParser()!
    Par L4BiN dans le forum Format d'échange (XML, JSON...)
    Réponses: 5
    Dernier message: 21/06/2006, 09h32
  3. Probleme heritage : References sur la table parente
    Par Belgar dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 03/05/2005, 22h11
  4. probleme heritage en C#
    Par roninou dans le forum Windows Forms
    Réponses: 2
    Dernier message: 03/04/2005, 19h12
  5. [C++]Heritage et constructeur de copie
    Par matazz dans le forum C++
    Réponses: 2
    Dernier message: 25/03/2005, 12h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo