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

SL & STL C++ Discussion :

Pb avec le conteneur set


Sujet :

SL & STL C++

  1. #1
    Inactif
    Inscrit en
    Mars 2009
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 20
    Par défaut Pb avec le conteneur set
    bonjours,

    voilà très rapidemant mon code!!!!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    void Section :: set_payload(set<TS> entree){
     
     
    int pos=0;   //initaialiser la position à partir delaquelle on va copier les informations //dans payload
    payload=new u_char;
          for(int i=0; i<entree.size(); i++)
            {
            memcpy(payload+pos,(entree[i].getpayload()),(sizeof(entree[i].getpayload())));
           pos+=sizeof(entree[i].getpayload());
     
        }
        return payload;
    }
    j'ai crée la classe TS que j'ai testé le bon fctnnement de ses methodes.
    ma classe section est composé de TS pour ainsi créer son vrai payload à partir du payload de TS.(payload de TS c du unsigned char)

    Néanmoins, en complilant voilà le msg qui vient me perturber

    section.cpp:114: error: no match for ‘operator[]’ in ‘entree[i]’

  2. #2
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    Bah c'est normal, l'opérateur [] n'existe pas pour std::set...

  3. #3
    Inactif
    Inscrit en
    Mars 2009
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 20
    Par défaut iterator sur set de classe et possibilite d'accès aux methose de cette classe
    j'ai trouvé un problème pour accéder au contenu du conteneur "set" car l'pérateur [ ] n'existe pas.
    en pensant aux iterateurs:
    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
     
    void Section :: set_payload(set <TS> entree){
     set<TS> :: iterator it;
     
    int pos=0;   //initaialiser la position à partir delaquelle on va copier les informations dans payload
    payload=new u_char;
          for(it=entree.begin();it != entree.end(); it++)
            {
            memcpy(payload+pos,it->getpayload(),184);
           pos+=184;
     
     
        }
     
    }
    avec " getpayload() " est une methode public de la classe TS qui retourne un const unsigned char*

    en complilant voilà ce que je reçoi

    section.cpp: In member function ‘void Section::set_payload(std::set<TS, std::less<TS>, std::allocator<TS> >)’:
    section.cpp:116: error: ‘const class TS’ has no member named ‘get_payload’
    j'ai vérifier avec *it ... rien
    j'ai vérifier l'hortographe rien!!!!!
    que puis je faire???

  4. #4
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Salut,
    Je présume que ce n'est pas l'intégralité de ton code. Vraisemblablement tu as déclaré une méthode getpayload mais celle dont il a besoin est la version const
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    class TS
    {
    public:
      unsigned char const *getpayload()const;
    }
    Autres remarques :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    payload=new u_char;
    ceci n'alloue qu'un seul u_char. Si tu en as besoin de 184*entree.size(), alors il faut allouer la bonne taille :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    payload=new u_char[184*entree.size()];
    Et de le supprimer :
    Il est certainement plus judicieux de passer ton set par référence constante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void Section :: set_payload(set <TS> const &entree)
    Si tu débutes, évite l'utilisation des pointeurs : std::string pour les chaînes de caractères, std::vector pour les tableaux, etc...

    Si payload est membre de Section : n'utilises pas de pointeur.
    Ou alors, fais attention :pointeurs intelligents

  5. #5
    Inactif
    Inscrit en
    Mars 2009
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 20
    Par défaut Ajout des balises [CODE]. Merci d'y penser !!
    salut,

    j'ai modifié mon code de la façon que tu m'as indiqué :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    void Section :: set_payload(set <TS> const & entree){
     set<TS> :: iterator it;
     
    int pos=0;   //initaialiser la position à partir delaquelle on va copier les informations dans payload
    payload=new u_char;
          for(it=entree.begin();it != entree.end(); it++)
            {
         /*   memcpy(payload+pos,it.getpayload(),184);
           pos+=184;*/
              it->get_payload();
     
        }
     
    }
    et dans la classe TS la methode :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    unsigned char* TS :: getpayload() const
    et l'erreur persiste comme meme:

    section.cpp: In member function ‘void Section::set_payload(const std::set<TS, std::less<TS>, std::allocator<TS> >&)’:
    section.cpp:116: error: ‘const class TS’ has no member named ‘get_payload’

  6. #6
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Peux-tu montrer ta déclaration de TS ?

  7. #7
    Inactif
    Inscrit en
    Mars 2009
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 20
    Par défaut
    Citation Envoyé par 3DArchi Voir le message
    Peux-tu montrer ta déclaration de TS ?
    voila le .h de TS

    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
    class TS{
     
        public:
            TS(){}
            TS(u_char* data){
                                        ts_h=new TS_header;
                                        memcpy(ts_h,data,4);
                                       // payload=new u_char[184];
                                        //memcpy(payload,data,7);
                                        }
            TS(u_char* Payload,int size){}
            virtual ~TS(){};
             // le pid du paquet TS
            u_int16 getpid();
            void setpid(u_int16 pid);
             //début d'une section
            bool getpayload_start();
            void setpayloadstart(bool start);
            // la valeur du continuity counter
            u_int8 getcoutinuity_counter() ;
            void setcountinuity_counter(u_int8 counter);
           //le vrai payload dans le paquet
            const u_int8* getpayload() const;
            void setpayload(u_int8* data);
            void setpayload(u_int8* data, int size);
           //l'existence d'un champ d'adaptation
            bool getadaptation_field();
            void setadaptation_field(bool adaptation);
            //cette methode retourne le table_id de la section si c le debut de la section sinon elle retourne une valeur qui ne correspond à une table
            u_int8 get_table_id();
         private:
               //les attributs
             TS_header* ts_h;
             u_char* payload;
     
    };
    et voilà celui de la methode getpayload:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    const u_int8* TS :: getpayload() const {
     
        return payload;
    }

  8. #8
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Salut,
    As-tu inclus le .h dans section ?
    Le cas échéant, peux-tu montrer l'intégralité de cette classe (déclaration et définition) ?

  9. #9
    Membre Expert

    Avatar de IrmatDen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 727
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 727
    Par défaut
    Salut,

    getpayload() n'existe pas dans le .h que tu as posté.

  10. #10
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Citation Envoyé par IrmatDen Voir le message
    Salut,

    getpayload() n'existe pas dans le .h que tu as posté.
    Si si, mais il est bien caché :
    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
    class TS{
     
        public:
            TS(){}
            TS(u_char* data){
                                        ts_h=new TS_header;
                                        memcpy(ts_h,data,4);
                                       // payload=new u_char[184];
                                        //memcpy(payload,data,7);
                                        }
            TS(u_char* Payload,int size){}
            virtual ~TS(){};
             // le pid du paquet TS
            u_int16 getpid();
            void setpid(u_int16 pid);
             //début d'une section
            bool getpayload_start();
            void setpayloadstart(bool start);
            // la valeur du continuity counter
            u_int8 getcoutinuity_counter() ;
            void setcountinuity_counter(u_int8 counter);
           //le vrai payload dans le paquet
            const u_int8* getpayload() const;
            void setpayload(u_int8* data);
            void setpayload(u_int8* data, int size);
           //l'existence d'un champ d'adaptation
            bool getadaptation_field();
            void setadaptation_field(bool adaptation);
            //cette methode retourne le table_id de la section si c le debut de la section sinon elle retourne une valeur qui ne correspond à une table
            u_int8 get_table_id();
         private:
               //les attributs
             TS_header* ts_h;
             u_char* payload;
            
    };

  11. #11
    Inactif
    Inscrit en
    Mars 2009
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 20
    Par défaut
    salut,

    j'ai tout vérifier!!!

    bon tu as demandé le code de TS le voilà
    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
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    #include "../include/section.h"
     
     
     
     
     
    //******************les methodes de la classe TS**************************************//
     
     
     
     
    //les methodes touchant le payload_strat_indicator
     
    bool  TS :: getpayload_start()  {
     
        return (bool) ts_h->payload_strat_indicator;
    }
    void TS :: setpayloadstart(bool start){
     
      if(start)
     
          ts_h->payload_strat_indicator=1;
     
      else
     
           ts_h->payload_strat_indicator=0;
    }
     
    //les methodes pour verifier l'existance d'une partie adaptation dans le paquet TS
     
    bool TS :: getadaptation_field()
            {
                return (bool) ts_h->adaptation_field;
            }
     
    //les PID du paquet TS
     
    u_int16 TS :: getpid(){
        u_int16 s=0;
        s=ts_h->PID_hi; 
        s<<=8;
        s |=ts_h->PID_lo;
        return s;
    }
    void TS :: setpid(u_int16 pid){
     
     
        ts_h->PID_lo=(u_int8) pid&0xFF;
        pid>>=8;
        ts_h->PID_hi=pid&0x1F;
    }
     
    //les methodes pour s'informer ou modifier la valeur du champ continuity counter
     
    u_int8 TS :: getcoutinuity_counter() {
     
        return (u_int8) ts_h->continuity_counter;
     
    }
    void TS :: setcountinuity_counter(u_int8 counter){
     
        ts_h->continuity_counter =counter;
    }
     
    //les methodes touchant le vrai payload dans le paquet TS
     
    const u_int8* TS :: getpayload() const {
     
        return payload;
    }
    void TS :: setpayload(u_int8* data){
     
     
        if (getpayload_start())
        {
            if(!getadaptation_field())
            {
                payload=new u_char;
                memcpy(payload,data+5+data[4],184-data[4]);
            }
        }
    }
     
    //cette methode n'a une signification que lors d'un debut de section
    u_int8 TS :: get_table_id(){
        return payload[0];
    }
     
     
     
    //******************************************************************************************
    //*****************************************************************************************
     
     
     
    //******************les methodes de la classe Section**************************************//
     
     
    //les composants TS
    set <TS> Section :: get_composant_ts(){
        return composant_ts;
    }
    void Section :: set_composant(set <TS> value){
        composant_ts=value;
    }
     
    void Section :: set_payload(set <TS> const & entree){
    set<TS> :: iterator it;
     
    int pos=0;   //initaialiser la position à partir delaquelle on va copier les informations dans payload
    payload=new u_char;
          for(it=entree.begin();it != entree.end(); it++)
            {
         /*   memcpy(payload+pos,it.getpayload(),184);
           pos+=184;*/
          u_char*p= (*it).get_payload();
     
        }
     
    }
    const u_char* Section ::get_payload(){
     
        return payload;
     
    }

  12. #12
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    void Section :: set_payload(set <TS> const & entree){
    set<TS> :: const_iterator it; // car set <TS> const & entree
    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
    void Section :: set_payload(set <TS> const & entree){
    set<TS> :: iterator it;
     
    int pos=0;   //initaialiser la position à partir delaquelle on va copier les informations dans payload
    payload=new u_char;
          for(it=entree.begin();it != entree.end(); it++)
            {
         /*   memcpy(payload+pos,it.getpayload(),184);
           pos+=184;*/
          u_char*p= (*it).get_payload();
           
        }
     
    }
    et :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    class TS{
     
        public:
           //le vrai payload dans le paquet
            const u_int8* getpayload() const;
    Et get_payload != getpayload

    Citation Envoyé par ilyes_ka Voir le message
    j'ai vérifier l'hortographe rien!!!!!
    Pas assez, faut croire

  13. #13
    Inactif
    Inscrit en
    Mars 2009
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 20
    Par défaut
    fi licitation tu as une très bonne observation!

  14. #14
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Citation Envoyé par ilyes_ka Voir le message
    fi licitation tu as une très bonne observation!
    Non, j'ai un compilateur, je lis un message d'erreur et j'utilise la fonction 'rechercher' dans mon IDE. Après:

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

Discussions similaires

  1. Probleme avec les options SET
    Par Le Pharaon dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 27/11/2006, 10h26
  2. [C#]Remplir un tree view avec un data set
    Par maitesn1 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 06/07/2006, 09h32
  3. Réponses: 1
    Dernier message: 22/04/2006, 19h02
  4. [Débutant - STL] Conteneur set
    Par @r$£~%[ dans le forum SL & STL
    Réponses: 4
    Dernier message: 11/08/2005, 22h43
  5. Problème avec la cmd set dans .bash_profile ?
    Par sali dans le forum Linux
    Réponses: 2
    Dernier message: 01/08/2005, 05h34

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