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++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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;
    }

+ 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