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

Langage C++ Discussion :

copier le contenu d'un struct passé en ref dans un tableau de struc


Sujet :

Langage C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Avatar de onet
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    365
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2002
    Messages : 365
    Par défaut copier le contenu d'un struct passé en ref dans un tableau de struc
    Hello,

    Voila, la situation initale:

    J'ai un struct que je passe en référence à une fonction. Cette fonction à pour but de recevoir ce struct, et d'en faire une copie dans un tableau de struct. Comment je le fais? Je n'y arrive pas!

    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
     
    struct msg {
        int    cmd_id;
        int    lenght;
        char * params;
        bool urgent;
     
    };
     
    msg list_msg[MSG_NBR_MAX];
     
    bool Queue::send_msg( msg * message ){
     
        int pos;
     
        if( this->end_list + 1 != this->start_list ){
            if(this->end_list != MSG_NBR_MAX - 1)
                pos = this->end_list + 1;
            else
                pos = 0;
     
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
     
            this->end_list++;
        }
     
        return true;
    }
    la ou y a les XXXXXXXXXXX, je dois copier le contenu de mon message (le contenu, pas sa référence) dans mon tableau de struct. J'ai essayé:
    this->list_msg[pos].cmd_id = message.cmd_id;

    Sans succès (avec *message.cmd_id, &message.cmd_id aussi) . Mes bases de C++ étant relativement lointaine, je nage un peu... Si qqun a une piste pour m'aiguiller?

    merci.
    Onet

  2. #2
    Membre éclairé
    Avatar de onet
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    365
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2002
    Messages : 365
    Par défaut
    C'est bon, résolu!

    Merci, et désolé du bruit!

    Onet

  3. #3
    Membre éclairé
    Avatar de onet
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    365
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2002
    Messages : 365
    Par défaut
    mmm...

    Petite précision... Y a pas moyen de faire plus "propre":

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
            this->list_msg[pos].cmd_id = message->cmd_id;
            this->list_msg[pos].urgent = message->urgent;
            for(int i = 0; i < NBR_PARAMS_MSG; i++)
                this->list_msg[pos].params[i] = message->params[i];
    Sachant que ma struct est:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    struct msg {
        int    cmd_id;
        char params[NBR_PARAMS_MSG];
        bool urgent;
     
    };
    ???

    Onet

  4. #4
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this->list_msg[pos] = *message;
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    memcpy(this->list_msg[pos], message, sizeof(this->list_msg[pos]));
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  5. #5
    Membre Expert
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Par défaut
    Le this est n'est pas obligatoire.

    Soit dit en passant tu devrais regarder du côté de std::vector<>

  6. #6
    Membre expérimenté Avatar de vikki
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    292
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2007
    Messages : 292
    Par défaut
    Hello,
    Tu pourrais surcharger l'opérateur d'affectation de ta structure:
    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
     
     
    struct msg 
    {
        int    cmd_id;
        std::string params;
        bool urgent;
     
        msg & operator=(const msg & right)
        {
             cmd_id = right.cmd_id;
             params = right.params;
             urgent = right.urgent;
        }
     
    };
    A enjoliver ensuite en ajoutant un constructeur par copie.
    Dans tous les cas, je te déconseilles d'utiliser l'opérateur d'affectation sans le surcharger en gardant un char* pour params : tu feras une copie de pointeur (chaque params pointera vers le même emplacement mémoire), pas une copie du contenu (à moins que cela ne soit ce que tu souhaite).
    C'est vrai qu'un std::vector ou une std::list va te faciliter la vie dans ce cas.

Discussions similaires

  1. Copier le contenu d'un .docx pour l'ajouter dans un autre .docx
    Par ahmedpa dans le forum Général Java
    Réponses: 17
    Dernier message: 17/07/2013, 13h27
  2. afficher le contenu d'une table de ma BDD dans un tableau
    Par nono2009 dans le forum Struts 2
    Réponses: 1
    Dernier message: 22/06/2009, 20h14
  3. Réponses: 1
    Dernier message: 05/12/2006, 10h40
  4. Réponses: 8
    Dernier message: 25/01/2006, 20h32
  5. Réponses: 2
    Dernier message: 20/11/2005, 18h54

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