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 :

surcharge d'opérateur avec classes différentes


Sujet :

C++

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2013
    Messages : 4
    Points : 2
    Points
    2
    Par défaut surcharge d'opérateur avec classes différentes
    Bonjour à tous !

    Voilà j'ai besoin pour mon stage de M2 d'implémenter une surcharge d'opérateur, qui combine des classes différentes. Je m'exlique : j'ai créé une classe Matrix22 qui sert pour des matrices 2*2, et une classe Vect qui contient des vector (besoin de dynamique).

    Jusque là, pas de souci pour surcharger des opérateurs, je peux additionner les matrices entre elles, les vecteurs entre eux etc...
    Mais ce que je voudrais c'est surcharger l'opérateur *= puis l'opérateur *, afin de pouvoir définir l'opération "matrice agissant sur un vecteur". Je vous montre le code :

    Dans le vect.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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
     
    #ifndef VECT
    #define VECT
     
    #include <vector>
    #include <iostream>
    #include "Matrix.h"
     
    class Vect
    {
    /** \class Vect
       * \brief tool for intelligent arrays
       */
     
     public:
     
        Vect();
    /** \fn Vect()
     * \brief default constructor
    */
        Vect(int size);
    /** \fn Vect(int size)
     * \brief surcharged constructor, specifying the size
    */
        void defineelement(int i,double a);
    /** \fn defineelement(i,a)
     * \brief put the value a in case i of m_array
    */
     
        void printarray() const;
    /** \fn printarray()
     * \brief print all elements of m_array
    */
     
        Vect& operator*=(const Matrix22 &matrix);//CE QUE JE VOUDRAIS DEFINIR
     
     
        Vect& operator+=(const Vect &vect2);
        Vect& operator-=(const Vect &vect2);
        Vect& operator*=(const Vect &vect2);
     
     protected:
     
      std::vector<double> m_array;/**< array, core of the tool*/
      int m_size;/**< size of the array*/
    };
     
     
    Vect operator+(Vect const& a, Vect const& b);
    Vect operator-(Vect const& a, Vect const& b);
    Vect operator*(Vect const& a, Vect const& b);
     
    #endif
    puis une partie du Vect.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
     
    Vect& operator*=(const Matrix22 &matrix)//CE QUE JE VOUDRAIS DEFINIR
    {
        double x[2];
        for(int j=0;j<2;j++)
        {
            x[i]=matrix.m_array[i][j]*m_array[j];
        }
        for(int i=0;i<2;i++)
        {
            m_array[i]=x[i];
        }
        return *this;
    }
    Or le compilo m'affiche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    error : 'Matrix22' does not name a type
    dans le Vect.h, à la ligne que j'ai commentée. Pourtant il y a bien un au début de ce Vect.h, donc pourquoi cette erreur ?

    Ce serait très gentil de votre part de bien vouloir m'aider, parce que là je vois pas trop...

  2. #2
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 629
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 629
    Points : 30 692
    Points
    30 692
    Par défaut
    Salut,

    Peut etre as tu un léger problème de référence croisée

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2013
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Merci, effectivement ça change, mais maintenant le compilo me dit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     erreur: ‘Vect& operator*=(const Matrix22&)’ must take exactly two arguments
    edit :
    sur la ligne du cpp

    edit2 : ok en fait il manquait devant operator. Mais maintenant il me raconte que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    erreur: ‘double Matrix22::m_array [2][2]’ is protected
    .
    Il doit falloir faire une déclaration d'amitié non ?

  4. #4
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 629
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 629
    Points : 30 692
    Points
    30 692
    Par défaut
    Citation Envoyé par weird73 Voir le message
    Merci, effectivement ça change, mais maintenant le compilo me dit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     erreur: ‘Vect& operator*=(const Matrix22&)’ must take exactly two arguments
    edit :
    sur la ligne du cpp
    Ben, pour une fois que le message est clair, on ne va pas se plaindre

    Il te dit qu'il faut deux arguments à l'opérateur *= et c'est normal: il faut l'opérande de gauche et celui de droite

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2013
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    regarde mon edit2.

    Mais pourtant les opérateurs de surcharge avaient exactement la même structure pour les autres cas, comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Vect& operator+=(const Vect &vect2);
    .
    Il n'y a pas de problème d'opérandes, si ?

    edit : si je mets une déclaration d'amitié, il me redit que il faut deux arguments, ce qui semble accréditer ta thèse, mais je ne comprends pas.
    edit2 : ok je suis un boulet, il manquait encore un Vect::.
    Merci beaucoup pour votre aide, c'est très gentil et ça m'aide bien !

  6. #6
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 629
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 629
    Points : 30 692
    Points
    30 692
    Par défaut
    Citation Envoyé par weird73 Voir le message
    regarde mon edit2.

    Mais pourtant les opérateurs de surcharge avaient exactement la même structure pour les autres cas, comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Vect& operator+=(const Vect &vect2);
    .
    Il n'y a pas de problème d'opérandes, si ?

    edit : si je mets une déclaration d'amitié, il me redit que il faut deux arguments, ce qui semble accréditer ta thèse, mais je ne comprends pas.
    Pourrais tu donner, vu que tu ne l'as pas encore fait, le code de Matrix.h

    Je ne serais pas étonné outre mesure que tes opérateurs soient des fonctions membre dans Vect et des fonctions libres dans Matrix, mais ce n'est qu'une supposition

  7. #7
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2013
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Cf edit précédent, merci beaucoup !

  8. #8
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 629
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 629
    Points : 30 692
    Points
    30 692
    Par défaut
    Citation Envoyé par weird73 Voir le message
    edit : si je mets une déclaration d'amitié, il me redit que il faut deux arguments, ce qui semble accréditer ta thèse, mais je ne comprends pas.
    Et pour cause, la déclaration d'amitié a deux résultats:
    1. sortir ce qui est déclaré ami de la classe en cours
    2. permettre à ce qui est ami d'accéder à ce qui ne serait normalement pas accessible
    Le premier point est ici primordial à ton problème

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

Discussions similaires

  1. surcharge d'opérateur avec parametre
    Par contremaitre dans le forum C++
    Réponses: 7
    Dernier message: 15/06/2010, 12h24
  2. Surcharge d'opérateur dans une classe template
    Par Opérateur dans le forum Langage
    Réponses: 6
    Dernier message: 22/12/2008, 03h26
  3. Réponses: 9
    Dernier message: 09/05/2008, 23h53
  4. classe : surcharge d'opérateurs
    Par rouliane dans le forum C++
    Réponses: 21
    Dernier message: 21/01/2008, 09h34
  5. projet avec classes langages différents
    Par Hyst76 dans le forum Général Dotnet
    Réponses: 1
    Dernier message: 25/03/2007, 15h41

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