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 :

redefinition operateur


Sujet :

C++

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    228
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Décembre 2005
    Messages : 228
    Points : 93
    Points
    93
    Par défaut redefinition operateur
    bonjour,
    je fais une classe vecteur et je dois redefinir des opérateurs. Jusque là pas de probleme mais on me demande de redefinir l'operateur * par une fonction donc je fais la déclaration dans le point h suivante : Vecteur& operateur* (const Vecteur&, const Vecteur&); Mais il n'aime pas du tout cette déclaration. Pourquoi ? telle est la question...

    merci par avance.

  2. #2
    Expert confirmé
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 4 062
    Points
    4 062
    Par défaut
    L'opérateur doit prendre un paramètre je pense, le second étant l'objet "this".
    Formateur expert .Net/C#/WPF/EF Certifié MCP disponible sur Paris, province et pays limitrophes (enseignement en français uniquement).
    Mon blog : pragmateek.com

  3. #3
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    Citation Envoyé par seriousme
    L'opérateur doit prendre un paramètre je pense, le second étant l'objet "this".

    Il y a deux façons de redéfinir un opérateur (binaire ou unaire) :
    par une fonction membre, dans ce cas, l'instance en cours (*this) est une des opérande (la seule opérande pour un opérateur unaire, l'opérande gauche pour un opérateur binaire) et l'autre opérande et le paramètre de la fonction.

    une fonction externe à la fonction (le plus souvent amie), dans ce cas, le premier paramètre est l'opérande gauche, et le second l'opérande droite (dans le cas d'un opérateur binaire bien sûr)

    ensuite, on pourrait certainement t'aider plus si on avait le message d'erreur...
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag (en bas)

  4. #4
    Membre habitué Avatar de b Oo
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 179
    Points : 185
    Points
    185
    Par défaut
    Salut,
    je dirais que l'erreur vient peut-etre du fait que tu renvoies une référence sur un objet qui est détruit à la fin de ta fonction d'où un message d'erreur.

    Bonne journée.

    b Oo
    b Oo

  5. #5
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    Citation Envoyé par b Oo
    Salut,
    je dirais que l'erreur vient peut-etre du fait que tu renvoies une référence sur un objet qui est détruit à la fin de ta fonction d'où un message d'erreur.

    Bonne journée.

    b Oo
    exacte, voilà un point qu'on avait pas remarqué...

    En fait, sans autre informations que "il aime pas" ni le contexte on peut te trouver toutes les erreurs du monde...
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag (en bas)

  6. #6
    Membre confirmé
    Inscrit en
    Juillet 2005
    Messages
    512
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 512
    Points : 641
    Points
    641
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Vecteur operateur* (const Vecteur&);
    Déclaré comme ceci serait peut-être suffisant.

  7. #7
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Ca n'a rien à voir avec le problème, mais si cette surcharge désigne le produit scalaire ou vectoriel alors c'est une très mauvaise idée. Pour ça il vaudra toujours mieux utiliser des fonctions classiques.

  8. #8
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Citation Envoyé par Lucien63
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Vecteur operateur* (const Vecteur&);
    Déclaré comme ceci serait peut-être suffisant.
    Il doit d'abord nous indiquer :
    - où est le prototype de cette fonction, dan une classe ou pas
    - le vrai message d'erreur du compilateur.

  9. #9
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    C'est operator, pas operateur.
    Boost ftw

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    228
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Décembre 2005
    Messages : 228
    Points : 93
    Points
    93
    Par défaut
    merci pour ces commentaires,
    j'ai essayé de modifier Vecteur& en Vecteur mais ça ne change rien. Il m'est demandé de pouvoir calculer le produit scalaire de deux vecteurs en surchargeant l'operateur * et cette surcharge doit être effectuée par l'intermédiaire d'une fonction et non d'une méthode de la clase Vecteur. Avec ce sujet, j'en déduis que la déclaration de cette fonction doit être faite comme ceci (dans le .h) :

    class Vecteur{

    ...

    };

    Vecteur operator* (const Vecteur&, const Vecteur&);



    et l'implémentation doit être faite dans le .cpp.
    Qu'en pensez-vous?

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    228
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Décembre 2005
    Messages : 228
    Points : 93
    Points
    93
    Par défaut
    voici les erreurs a la compilation (j'utilise Dev-C++) :


    expected init-declarator before '*' token

    expected `,' or `;' before '*' token

    Ces erreurs font référence à la déclaration de la fonction (ds le .h)

    merci d'avance

  12. #12
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    dans le code que tu donnes () la syntaxe est correcte, ensuite quand tu dis, qu'il aime pas, il serait bon d'avoir l'erreur sans ça on ne POURRA PAS t'aider !
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag (en bas)

  13. #13
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Ta déclaration est correcte. Juste pour être sûr, tu la places bien après la déclaration de la classe ?

  14. #14
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    228
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Décembre 2005
    Messages : 228
    Points : 93
    Points
    93
    Par défaut
    ourVoici le .h et la déclaration est bien en dehors de la classe

    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
     
    class Vecteur{
          protected :
          //attributs
          int dimension;
          float* coord;
     
          static const float val_defaut = 0.0;
          static const int dim_defaut = 3;
     
          public :
          //constructeurs
          Vecteur(int, float);
          Vecteur(int);
          Vecteur();
     
          //destructeur
          ~Vecteur();
     
          //methodes
          float get(int) const ;
     
          float set(int,float);
     
          int dimensions() const;
     
          //affecte le contenu de v dans this
          Vecteur& operator= (const Vecteur&);
     
          Vecteur& operator+ (const Vecteur&);
     
    };
          void afficherVecteur(const Vecteur*);
     
          //surcharge de l'opérateur *
          Vecteur operator* (const Vecteur&, const Vecteur&);
     
    #endif

  15. #15
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    plutôt que d'utiliser ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
          int dimension;
          float* coord;
    tu ferais mieux d'avoir recours à un vector<float> de la STL... tuto sur la STL : http://www.developpez.biz/download/stl.pdf
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag (en bas)

  16. #16
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    228
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Décembre 2005
    Messages : 228
    Points : 93
    Points
    93
    Par défaut
    en fait c'est un tp donc j'ai des étapes à respecter et je ne peux pas utiliser la stl sinon le tp ne sert à rien vu que c'est mon premier tp de c++ ...

  17. #17
    Membre habitué Avatar de b Oo
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 179
    Points : 185
    Points
    185
    Par défaut
    Bonsoir,
    les lignes d'erreurs indiquées par le compilateur font bien référence à ton fichier.h ? Normalement tu dois avoir le nom du fichier et la ligne où il y a une erreur.
    Je pense qu'il y a peut-être une erreur de syntaxe dans ton fichier.cpp, tu pourrais montrer le code de celui-ci (les lignes que le compilateur t'indique).

    b Oo
    b Oo

Discussions similaires

  1. Réponses: 5
    Dernier message: 23/11/2008, 20h26
  2. Redefinition Operateur Class
    Par steliseb dans le forum Windows Forms
    Réponses: 9
    Dernier message: 29/01/2008, 12h24
  3. operateur de condition
    Par Jean-Matt dans le forum Langage SQL
    Réponses: 4
    Dernier message: 01/12/2004, 16h56
  4. [langage] opérateur booleen
    Par louisis dans le forum Langage
    Réponses: 4
    Dernier message: 30/06/2004, 17h12
  5. [langage] l'operateur tr///
    Par March' dans le forum Langage
    Réponses: 4
    Dernier message: 03/03/2003, 22h57

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