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 :

Problème héritage Matrice


Sujet :

C++

  1. #1
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 145
    Par défaut Problème héritage Matrice
    Bonjour,

    J'ai un problème avec l'héritage.
    Voilà mon schéma :

    Matrice.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
    32
    33
    class Matrice
    {
        protected:
     
            typedef float *ligne;
            ligne *matrice; // données de la matrice
            int nbLig; // Nombre de lignes de la matrice
            int nbCol; // Nombre de colonnes de la matrice
     
     
       public:
     
            int getNbColonnes() const;
            int getNbLignes() const;
     
            //les constructeurs/destructeur
     
            Matrice(); // Constructeur par défaut
            Matrice(int, int, double); // constructeur à 3 paramètres (nombre de lignes, nombre de collones, valeur de la matrice)
            ~Matrice(); // Destructeur
     
            // Méthodes
     
            const float get(const unsigned int &, const unsigned int &) const;
     
            //les operateurs
     
            Matrice operator*(const Matrice&);
            //Matrice operator*(const Vecteur&);
            float &operator()(int i, int j);
            friend std::ostream& operator<<(std::ostream &, const Matrice&);
     
    }

    Matrice.cpp

    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
    Matrice::Matrice()
        {
            nbLig=4;
            nbCol=4;
            matrice = NULL;
        }
     
        Matrice::Matrice(int nl, int nc, double valeur)
        {
            nbLig = nl;
            nbCol = nc;
            matrice = new ligne[nbLig];
            for(int i=0; i<nbLig; i ++)
            {
                matrice[i] = new float[nbCol];
                for(int j=0; j<nbCol; j ++)
                matrice[i][j] = valeur; //initialisation à 'valeur'
            }
        }
    MAtriceTrans.h

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    class MatriceTrans : public Matrice
    {
        protected:
            float Tx; // Défaut de translation en x
            float Ty; // Défaut de translation en x
            float Tz; // Défaut de translation en x
     
        public:
            MatriceTrans();
            MatriceTrans(float, float, float);
     
     
    };
    MatriceTrans.cpp

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    MatriceTrans::MatriceTrans(float Tx, float Ty, float Tz)
        {
            matrice[0][0]=1.0;
            matrice[0][0]=1.0;
            matrice[1][1]=1.0;
            matrice[2][2]=1.0;
            matrice[3][3]=1.0;
            matrice[0][3]=Tx;
            matrice[1][3]=Ty;
            matrice[2][3]=Tz;
     
        }

    Dans le constructeur de MatriceTrans, je ne peux pas accéder aux données de ma matrice (matrice[][]) alors que je l'ai mis en protected.
    Je ne comprends pas quel est les problème

    Merci de bien voulir m'aider.

  2. #2
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 292
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 292
    Billets dans le blog
    2
    Par défaut
    Le problème doit être ailleurs, car effectivement, une variable membre protected est visible par les classes qui en héritent (dans le cas d'un héritage public, ce qui est le cas ici).

    Je pense que tu dois mal interpréter le message d'erreur du compilateur.

  3. #3
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 145
    Par défaut
    Il n'y a pas d'erreurs mais lorsque je veux instancier, çà passe dans le constructeur mais çà ne passe pas matrice[0][0]=1.0;...

    Donc du coup l'instanciation ne fonctionne pas..

  4. #4
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 292
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 292
    Billets dans le blog
    2
    Par défaut
    Tu es sûr que tu appelles le bon constructeur?

  5. #5
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 145
    Par défaut
    MatriceTrans mattrans(2.0,3.0,1.0);
    cout<<mattrans.get(0,3);

    Devrait instancier puis m'afficher 2.0

  6. #6
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 292
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 292
    Billets dans le blog
    2
    Par défaut
    Ne serait-ce pas le get qui est mal implémenté?
    Tu es dans quel contexte de dev (systeme d'exploitation, IDE/editeur, compilateur)?

  7. #7
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 145
    Par défaut
    const float Matrice::get(const unsigned int & i, const unsigned int & j) const
    {
    return matrice[i][j];
    }

    J'suis sur windows XP, Code blocks

  8. #8
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 292
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 292
    Billets dans le blog
    2
    Par défaut
    Tu devrais essayer de trouver à quel moment se produit l'erreur. Parce que là je ne peux pas le deviner. Met des points d'arrêts aux moments clé. Par exemple au début du constructeur. Et regarde, en pas à pas, ce qui se passe au fur et à mesure de l'exécution.

  9. #9
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 292
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 292
    Billets dans le blog
    2
    Par défaut
    Ok je crois que j'ai trouvé l'erreur: ton tableau matrice n'est jamais alloué.

  10. #10
    Membre chevronné Avatar de Flo.
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2002
    Messages : 379
    Par défaut
    Ton code n'appelle pas clairement un constructeur de Matrice. Donc par défaut, c'est Matrice() qui est construit lors de la construction de MatriceTrans.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    MatriceTrans::MatriceTrans(float Tx, float Ty, float Tz)
    {
    matrice[0][0]=1.0;
    matrice[0][0]=1.0;
    matrice[1][1]=1.0;
    matrice[2][2]=1.0;
    matrice[3][3]=1.0;
    matrice[0][3]=Tx;
    matrice[1][3]=Ty;
    matrice[2][3]=Tz;
    }
    Du coup, Matrice::matrice est NULL.

    Il faudrait faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    MatriceTrans::MatriceTrans(float Tx, float Ty, float Tz)
    :
    Matrice(3, 4, 0)
    {
    matrice[0][0]=1.0;
    matrice[0][0]=1.0;
    matrice[1][1]=1.0;
    matrice[2][2]=1.0;
    matrice[3][3]=1.0;
    matrice[0][3]=Tx;
    matrice[1][3]=Ty;
    matrice[2][3]=Tz;
    }
    Flo.

  11. #11
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 145
    Par défaut
    C'est ce que je viens de me rendre compte donc du coup j'ai rajouté Matrice(4,4,0.0); dans le constructeur de MatriceTrans maisne passe toujours pas par matrice[0][0] je sais pas pourquoi...

  12. #12
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 145
    Par défaut
    Oups désolé j'ai publié en meme temps que toi XD !
    çà marche je te remercie vraiment beaucoup!!
    Je vois que tu es qualifiée niveau C++! Puis-je avoir ton adresse mail en privée car j'ai un projet à réaliser pendant 10 semaines et si dès fois tu pouvais m'aider quand je bloque sur des petits trucs çà serait super!!
    Merci.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème héritage et vecteur
    Par scrat88 dans le forum Langage
    Réponses: 10
    Dernier message: 23/05/2007, 18h02
  2. problème de matrice
    Par micfont999 dans le forum C++
    Réponses: 9
    Dernier message: 07/01/2007, 15h19
  3. [POO] Problème héritage des classes PHP4
    Par zana74 dans le forum Langage
    Réponses: 2
    Dernier message: 15/08/2006, 16h00
  4. Problème Héritage JavaScript
    Par Flavien dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 10/07/2006, 13h29
  5. Problème héritage CWnd
    Par ptitJP dans le forum MFC
    Réponses: 4
    Dernier message: 21/04/2006, 11h41

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