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 pour les attributs


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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 pour les attributs
    Bonjour

    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
    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
    ...
    }
     
    class Vecteur : public Matrice
    {
    ...
    }
     
    Vecteur Vecteur::operator*(const Matrice &mat)
    {
        Vecteur ret;
     
        ret.x = mat.matrice[0][0]*x + mat.matrice[0][1]*y + mat.matrice[0][2]*z + mat.matrice[0][3];
        ret.y = mat.matrice[1][0]*x + mat.matrice[1][1]*y + mat.matrice[1][2]*z + mat.matrice[1][3];
        ret.z = mat.matrice[2][0]*x + mat.matrice[2][1]*y + mat.matrice[2][2]*z + mat.matrice[2][3];
     
        return ret;
    }


    Le compilateur me dit que je ne peux pas accéder à l'attribut matrice (qui correspond aux éléments de ma matrice) alors que je l'ai mis en protected et que j'ai fait un héritage..
    Je ne comprends pas le problème, merci de bien vouloir m'aider.

  2. #2
    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
    Salut,

    Dans ta fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Vecteur Vecteur::operator*(const Matrice &mat)
    mat est marquée comme const. Tu ne peux donc pas accéder à ses attributs comme tu le fais excepté si tu les rends "mutable" ou si tu supprimes le const de l'argument de ta fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mutable ligne *matrice;
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Vecteur Vecteur::operator*(Matrice &mat)
    Flo.

  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
    Merci çà fonctionne!!
    Mais je viens de remarquer que ma fonction va retourner une matrice! =)

  4. #4
    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
    Attention, parce que mes 2 solutions ne sont peut-être pas bonnes d'un point de vue philosophie. Effectivement dans ta fonction, il est logique de mettre mat en const puisqu'elle n'est pas modifiée. Et mettre ses attributs en mutable n'est pas également une solution.

    La bonne (et troisième) solution à mon avis serait de proposer une fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    const double Matrice::get(const unsigned int & i, const unsigned int & j) const 
    {
        return matrice[i][j];
    }
    que tu pourrais utiliser comme ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Vecteur Vecteur::operator*(const Matrice &mat)
    {
        Vecteur ret;
     
        ret.x = mat.get(0,0)*x + mat.get(0,1)*y + mat.get(0,2)*z + mat.get(0,3);
        ret.y = mat.get(1,0)*x + mat.get(1,1)*y + mat.get(1,2)*z + mat.get(1,3);
        ret.z = mat.get(2,0)*x + mat.get(2,1)*y + mat.get(2,2)*z + mat.get(2,3);
     
        return ret;
    }
    Flo.

  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
    Merci!
    En effet je pense que c'est plus correcte.
    Néanmoins j'ai toujours deux erreurs :

    - pour cette ligne : Vecteur operator*(const Matrice &);

    ISO C++ forbids declaration of `Matrice' with no type

    expected ',' or '...' before '&' token

  6. #6
    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
    En fait, je suis dans la classe vecteur et le produit d'un vecteur par une matrice me retourne une matrice normalement donc çà va pas.

    Comment puis-je faire pour implémenter une méthode permettant de multiplier une matrice par un vecteur dans ma classe Vecteur?
    Je suis obligé de mettre deux paramètres nan? Mais pour une surcharge il ne faut pas même je crois qu'on ne peut pas..

    Merci de bien m'aider

    Vecteur Vecteur::operator*(const Vecteur &vect, const Matrice &mat) serait une idiotie je crois mais je ne vois pas comment faire..

Discussions similaires

  1. [XSD] Equivalent du <choice> pour les attribut
    Par BigOne55 dans le forum Valider
    Réponses: 6
    Dernier message: 14/03/2014, 19h24
  2. [XSD] Problème de vérification de choix pour les attributs
    Par yeti47 dans le forum Valider
    Réponses: 2
    Dernier message: 16/01/2012, 22h43
  3. Réponses: 1
    Dernier message: 08/02/2009, 15h43
  4. Réponses: 2
    Dernier message: 14/06/2006, 10h34
  5. Réponses: 7
    Dernier message: 13/02/2006, 17h13

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