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 :

Compréhension de code


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2014
    Messages : 6
    Par défaut Compréhension de code
    Bonjour,

    je suis entrain de modifier le code du protocole DSR sous NS2 ,
    j'ai rencontré ce code dans le fichier Path.h
    et j'arrive pas à comprendre le constructeur ID, j'ai jamais vu une déclaration pareil..
    votre aide m'est vraiment précieuse.
    Merci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Struct ID
    {
    friend class Path;
    
    inline ID(const struct sr_addr &a): addr(a.addr), 
        type((enum ID_Type) a.addr_type), t(-1),
    link_type(LT_NONE),
    	  log_stat(LS_NONE)
    	{
    		assert(type == NONE || type == MAC || type == IP);
    	}
    -------
    Merci
    Bou

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Ce ne sont pas des déclarations mais des initialisations des membres de la structure ID
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    ID(const struct sr_addr &a) 
      : 
        addr(a.addr),                     // Initialisation de addr      à la valeur a.addr
        type((enum ID_Type) a.addr_type), // Initialisation de type      à la valeur a.addr_type
        t(-1),                            // Initialisation de t         à la valeur -1
        link_type(LT_NONE),               // Initialisation de link_type à la valeur LT_NONE
        log_stat(LS_NONE)                 // Initialisation de log_stat  à la valeur LS_NONE
    c'est ce que l'on appelle une liste d'initialisation.

  3. #3
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2014
    Messages : 6
    Par défaut Compréhension de code
    Bonjour,

    Merci beaucoup Winjerome.. pour cette réponse claire et efficace.

    Bou

  4. #4
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Parce que visiblement, tu ne le sais pas encore, cette initialisation est importante.

    Cela permet de définir quel constructeur est appelé pour chaque membre, et avec quels arguments.
    Cela permet aussi de ne pas construire par défaut puis remplacer les membres.

    C'est important pour la manipulation de ressources, telles qu'une référence, un fichier, etc.

    En fait, pour une référence, c'est le seul moyen de la remplir.
    Le code suivant ne compile pas, car la référence n'est pas initialisée.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    class bidule {
        int& ref;
    public:
        bidule (int& r) {ref=r;}
    };
    Il faudrait faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    class bidule {
        int& ref;
    public:
        bidule (int& r) : ref(r){}
    };

  5. #5
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2014
    Messages : 6
    Par défaut compréhension du code
    Bonjour,

    merci Pierre ' leternel' pour ces informations intéressantes, c vrai que je savais pas ça.
    par la même occasion, pouvez vous m'aider sur ce code, je vous serez trés reconnaissante.

    En faite je suis entrain de modifier le code du protocle DSR dans NS2.

    il y un fichier Hdr_sr.h // qui décrit l’entête du packet.

    au début du fichier il y a la structure suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    struct sr_addr {
        int addr_type;	 /* same as hdr_cmn in packet.h */
        nsaddr_t addr;
    
        /*
        * Metrics that I want to collect at each node
        */
        double	Pt_; // cette variable est déclaré dans la structure mais n'est pas utilisé
                                             // après. moi je veux changer le code pour qu'il la prenne en considération
    };
    et les attributs de la calsse Hdr_sr sont les suivants :

    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
    class hdr_sr {
        private:
        int valid_;	 /* is this header actually in the packet?
        and initialized? */
        int salvaged_;	/* packet has been salvaged? */
    
        int num_addrs_;
        int cur_addr_;
        struct sr_addr addrs_[MAX_SR_LEN];// c'est un tableau d'ID dont le type est la structure sr_adrr (décrite au début)
    
        struct route_request	sr_request_;
        struct route_reply	sr_reply_;
        struct route_error	sr_error_;
    
        struct flow_header sr_flow_;
        struct flow_timeout	sr_ftime_;
        struct flow_unknown	sr_funk_;
        struct flow_default_err sr_fdef_unk;
    ...}
    la fonction qui initialise le Tableau addrs_[MAX_SR_LEN] est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    inline void append_addr(nsaddr_t a, int type) {
        assert(num_addrs_ < MAX_SR_LEN-1);
        addrs_[num_addrs_].addr_type = type;
        addrs_[num_addrs_++].addr = a;
    }
    comme ici il n initialise pas le champs Pt_, j'ai modifié la fonction ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    inline void append_addr(nsaddr_t a, int type, double P) {
        assert(num_addrs_ < MAX_SR_LEN-1);
        addrs_[num_addrs_].addr_type = type;
        addrs_[num_addrs_].Pt_=P
        addrs_[num_addrs_++].addr = a;
    }
    dans un autre fichier (dsragent.cc) il appelle cette fonction pour l'initialisation :
    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 DSRAgent::testinit()
    {
        struct hdr_sr hsr;
        
        if (net_id == ID(1,::IP))
        {
            printf("adding route to 1\n");
            hsr.init();
            hsr.append_addr( 1, NS_AF_INET ); // je l ai remplacé par la nouvelle définition : hsr.append_addr( 1, NS_AF_INET, 0.07 ); 
            
            
            route_cache->addRoute(Path(hsr.addrs(),
            hsr.num_addrs()), 0.0, ID(1,::IP));
        }
    j'ai essayé après d'afficher le contenu du tableau addrs_[].Pt_ , ça m'affiche toujours des zéros .. comme si il prend pas en considération le champs Pt et il ne le remplie pas ..

    je suis bloqué dessus ça fais 3 semaines .. je suis à court d'idée..
    votre aide m'est vraiment très précieuse..
    merci d'avance

    ci-joint le fichier dont je vous ai parlé (hdr_sr.h )
    Fichiers attachés Fichiers attachés

  6. #6
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Le code m'a l'air normal.

    Quand un affichage ne donne pas ce qu'on veut, c'est qu'on affiche autre chose.
    Soit parce ce que la valeur n'est pas celle qu'on croit, soit parce qu'on affiche une autre chose.
    Fais voir le code d'affichage, je ne serai pas surpris qu'il y ait une erreur dedans.

Discussions similaires

  1. compréhension de code en asp
    Par bidule123456 dans le forum ASP
    Réponses: 1
    Dernier message: 21/08/2007, 11h12
  2. compréhension de code (passage à une autre page)
    Par kokokaine dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 04/05/2007, 11h02
  3. Réponses: 3
    Dernier message: 12/01/2007, 09h42
  4. [VB-Access]recset! Pb de compréhension de code
    Par sk8bcn dans le forum VBA Access
    Réponses: 5
    Dernier message: 15/12/2006, 15h26
  5. Compréhension du code
    Par Ivanelis dans le forum Assembleur
    Réponses: 3
    Dernier message: 12/06/2006, 12h08

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