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

Discussion :

Ajout dans une QList de QList de structure

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Développeur
    Inscrit en
    Mai 2002
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Mai 2002
    Messages : 85
    Par défaut Ajout dans une QList de QList de structure
    Bonjour
    Je cherche depuis hier sans succès. J'ai déclaré une QList de QList de structure. Je cherche à ajouter un élément à la QList de second niveau sans succès.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    QList<QList<struct infos> > listeinfos;
    struct infos donnees;
     
    listeinfos.at(i).append(donnees); // rejeté par le compilateur
    listeinfos[i].append(donnees); // rejeté par le compilateur
    Etant novice en c++ et Qt, je bute.
    Merci par avance pour vos réponses.

  2. #2
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2010
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

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

    Informations forums :
    Inscription : Février 2010
    Messages : 57
    Par défaut
    Bonjour,
    Quels sont les messages du compilateurs ?
    Ton erreur vient principalement que tu ne fais pas attention au type de ta variable listeinfos.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    QList<QList<struct infos> > listeinfos;
    [..]
    listeinfos.at(i).append(donnees);
    Tu as une QList de QList de struct info, il faut ajouter une QList<infos> pour pouvoir modifier la première QList<infos> contenue dans ta listeinfos.

    Pour info en c++ quand tu déclare une structure tu peux directement utiliser le nom de ta structure sans utiliser le mot clés struct devant, dans le cas présent tu peux remplacer "struct infos" par "infos".

    En espérant t'avoir aidé.

  3. #3
    Membre confirmé
    Profil pro
    Développeur
    Inscrit en
    Mai 2002
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Mai 2002
    Messages : 85
    Par défaut
    Bien noté pour struct. Merci

    J'ai volontairement réduit le code à la portion intéressante. Ce faisant, je n'ai pas inclus les instructions permettant d'enrichir la QList de premier niveau.
    Voici un code plus approprié.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    QList<QList<infos> > listeinfos;
    infos donnees;
    QList<infos> listedonnees;
     
    listeinfos.append(listedonnees);
    listeinfos.at(0).append(donnees); // rejeté par le compilateur
    listeinfos[0].append(donnees); // rejeté par le compilateur
    Pour la ligne 6 le message du compilateur est :
    erreur: parsing 'const QList<infos>' as 'this' argument of void QList<T>::append(const T&) [with T = infos]' discards qualifiers

    Pour la ligne 7 le message du compilateur est :
    erreur: no matching function for call to 'QList<QList<infos> >::append(infos&)'
    candidats sont: void QList<T>::append(const T&) [with T = QList<infos>]
    void QList<T>::append(const QList<T>&) [with T = QList<infosMessage>]

  4. #4
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2010
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

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

    Informations forums :
    Inscription : Février 2010
    Messages : 57
    Par défaut
    Pour l'utilisation de la méthode at(int) c'est simplement qu'elle retourne une référence sur un objet constant si je ne me trompe pas.

    Pour le second cas je dois avouer que je ne comprends car avec un code similaire ça fonctionne chez moi

    Voici mon code (au cas où tu vois une différence que je n'aurais pas relevé) :

    Main :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    int main(int argc, char *argv[])
    {
      QList<QList<s_coord > > list;
      s_coord coord;
      QList<s_coord > lc;
     
      list.append(lc);
      list[0].append(coord);
      return EXIT_SUCCESS;
    }
    s_coord:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    struct s_coord
    {
      int x;
      int y;
      int z;
    };

  5. #5
    Membre confirmé
    Profil pro
    Développeur
    Inscrit en
    Mai 2002
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Mai 2002
    Messages : 85
    Par défaut
    Effectivement, ton code fonctionne. Je me rends compte que j'ai trop raccourci le code que j'ai fourni, vraiment désolé.
    listeinfos est en fait un argument de la méthode dans laquelle se trouve le problème.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    void maClasse::maMethode(QList<QList<infos> > *listeinfos)
    {
    infos donnees;
    QList<infos> listedonnees;
     
    listeinfos->append(listedonnees);
    listeinfos[0].append(donnees); // rejeté par le compilateur
    La ligne rejetée par le compilateur, ne l'est pas si je déclare listeinfos comme je l'avais indiqué dans le code précédent.

  6. #6
    Membre Expert

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2009
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2009
    Messages : 1 009
    Par défaut
    Ah ben oui, c'est un pointeur alors !

    Essaye plutôt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    (*listeinfos)[0].append(donnees);
    // ou
    listeinfos->operator[](0).append(donnees);

  7. #7
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2010
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

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

    Informations forums :
    Inscription : Février 2010
    Messages : 57
    Par défaut
    Un conseil, si tu peux passes ton listeinfos en référence constante au lieu d'un pointeur ce sera plus propre.

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

Discussions similaires

  1. big ajout dans une table
    Par bachilbouzouk dans le forum ASP
    Réponses: 4
    Dernier message: 19/04/2005, 10h22
  2. Ajout Dans une base de données
    Par belabyad dans le forum ASP
    Réponses: 8
    Dernier message: 11/03/2005, 13h25
  3. pb d'ajout dans une base de donnée
    Par loic.440 dans le forum ASP
    Réponses: 15
    Dernier message: 17/01/2005, 10h06
  4. Ajout dans une base
    Par semaj_james dans le forum Bases de données
    Réponses: 3
    Dernier message: 01/06/2004, 16h23
  5. [LG]probleme d'ajout dans une liste chainée...
    Par misteryann dans le forum Langage
    Réponses: 5
    Dernier message: 08/03/2004, 20h28

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