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++Builder Discussion :

Problème de surcharge d'operateur <


Sujet :

C++Builder

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Septembre 2003
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 108
    Par défaut Problème de surcharge d'operateur <


    Pour trier un vector d'une classe que j'ai créée, j'ai besoin de surcharger l'opérateur <. C'est la première fois que je fais un truc pareil et ça marche pas

    Voici le code :
    .h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    class TDetails
    {
    private:
      int Type;
      AnsiString FileName, Path, Version;
      TDateTime InstallDate;
     
    public:
      bool operator < (const TDetails &d);
    };
    .cpp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    bool TDetails::operator < (const TDetails &d)
    {
      if (d.GetVersion()!="")
        return Version < d.GetVersion();
      return InstallDate < d.GetInstallDate();
    }
    Ma classe se compile bien mais lors de la compile de celle qui trie le vector, j'ai une erreur "'operator<' non implémenté dans le type 'TDetails' pour les arguments du même type", avec la ligne suivante en erreur dans _function_base.h :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    template <class _Tp>
    struct less : public binary_function<_Tp,_Tp,bool> 
    {
      bool operator()(const _Tp& __x, const _Tp& __y) const { return __x < __y; }
    };
    Voici le code appelant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    vector<TDetails> details;
    (...)
    sort(details.begin(), details.end());
    Où donc qu'elle est l'erreur ?

  2. #2
    Membre confirmé
    Inscrit en
    Août 2005
    Messages
    136
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 136
    Par défaut
    salut,

    Il me semble qu'il faut aussi écrire l'opérateur "=" et le constructeur de recopie.
    mais j'en suis pas sur!
    moi j'avais fait ça pour un List.

  3. #3
    Membre Expert
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Par défaut
    Quand j'utilise STL, je surcharge un paquet d'opérateur.

    Voici, je crois, ceux qui sont nécessaire:
    # The assignment (=) operator must be specified so that sort routines can assign a new order to the members of the list.
    # The "less than" (<) operator must be specified so that sort routines can determine if one class instance is "less than" another.
    # The "equals to" (==) operator must be specified so that sort routines can determine if one class instance is "equals to" another.

  4. #4
    Membre confirmé
    Inscrit en
    Septembre 2003
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 108
    Par défaut
    Merci pour la réponse, mais ça marche toujours pas. J'ai surchargé les opérateurs == et = (en espérant que ce soit correct), mais j'ai toujours la même erreur.

    Voici le code (déjà est-ce qu'il est bon ?) :
    .h :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      bool operator == (const TDetails &d);
      void operator = (const TDetails &d);
    .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
    bool TDetails::operator == (const TDetails &d)
    {
      if (d.GetVersion()!="")
        return Version == d.GetVersion();
      return InstallDate == d.GetInstallDate();
    }
     
    void TDetails::operator = (const TDetails &d)
    {
      Type = d.Type;
      FileName = d.FileName;
      Path = d.Path;
      Version = d.Version;
      InstallDate = d.InstallDate;
    }
    Une idée ?

  5. #5
    Membre Expert
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Par défaut
    Salut voici du code qui viens d'un autre post:

    Citation Envoyé par Crayon Voir le message
    Salut, dans ton .h tu mets:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    protected:
        friend bool operator <(const Objet&, const Objet&);
        friend bool operator >(const Objet&, const Objet&);
    Dans to .cpp:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    bool operator <(const Objet& c1, const Objet& c2)
    {
        return true; // ou false, tu compares ici tes attributs
    }
    //---------------------------------------------------------------------------
     
    bool operator >(const Objet& c1, const Objet& c2)
    {
        return true; // ou false, tu compares ici tes attributs
    }
    //---------------------------------------------------------------------------

  6. #6
    Membre confirmé
    Inscrit en
    Septembre 2003
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 108
    Par défaut
    On dirait bien que ça marche ! Merci pour le bout de code

  7. #7
    Membre Expert
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Par défaut
    Si tout fonctionne comme tu le souhaites n'oublie pas de mettre

Discussions similaires

  1. problème de surcharge operateur '+' et '='
    Par Peter57 dans le forum Débuter
    Réponses: 46
    Dernier message: 29/05/2013, 16h23
  2. Problème de surcharge d'operateur
    Par CodeurNé dans le forum C++
    Réponses: 2
    Dernier message: 29/12/2012, 18h51
  3. Réponses: 1
    Dernier message: 21/08/2006, 19h17
  4. Problème de surcharge d'opérateurs
    Par Hell dans le forum C++
    Réponses: 17
    Dernier message: 17/01/2005, 16h01
  5. Réponses: 2
    Dernier message: 25/07/2004, 23h24

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