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 :

Initialisation d'un tableau de structures dynamique


Sujet :

C++

  1. #1
    Membre averti
    Femme Profil pro
    Ingénieur informatique scientifique
    Inscrit en
    Mai 2010
    Messages
    313
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur informatique scientifique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2010
    Messages : 313
    Points : 301
    Points
    301
    Par défaut Initialisation d'un tableau de structures dynamique
    Bonjour,

    je n'ai pas encore l'habitude de coder en C++ et de gérer les aspects allocation de mémoire, pointeurs, etc.
    J'ai une structure 'struct1' dans laquelle je voudrais avoir un tableau dynamique.
    Ce tableau est un tableau de structures 'struct2'.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    typedef struct
    {
        int maVariable1;
        double maVariable2;
    }struct2;
     
    typedef struct
    {
        struct2 monTableau[?]; //Comment declarer correctement ici?
    }struct1;
    Je ne sais pas à l'avance quelle sera la taille de 'monTableau', je voudrais donc l'initialiser vide. J'appelle plus tard une fonction qui va lire un fichier et remplir ce tableau, dont la taille dépendra du fichier.

    Cette fonction devra donc prendre 'monTableau' en argument, afin qu'il soit modifié.
    Comment déclarer correctement 'monTableau' au départ, et comment le passer à ma fonction ensuite?

    J'ai essayé d'utiliser vector:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    vector<struct2> monTableau;
    Mais cela me génère une erreur (même si je remplace 'struct2' par un type de variable simple comme 'int'):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    'expected ";" before "<" token'
    Merci d'avance pour votre aide!

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 764
    Points : 2 705
    Points
    2 705
    Par défaut
    Déjà, tu utilises pour déclarer tes structures une syntaxe qui n'a plus lieu d'être en C++. Il faut déclarer ta structure comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    struct struct2
    {
        int maVariable1;
        double maVariable2;
    };
    Tu dois effectivement utiliser un vecteur, mais en précisant l'espace de nommage std :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    struct struct1
    {
        std::vector<struct2> monTableau;
    };
    Il faut ensuite passer à la fonction ton vecteur par référence.

  3. #3
    Membre régulier Avatar de Mipwiq
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 42
    Points : 81
    Points
    81
    Par défaut
    Pour déclarer un tableau dynamique en c++ tu peux utiliser new.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int *tab;
    tab = new (int[10]); //allocation de 10 case de la taille de int
    Et c'est la même méthode pour chaque type de variable, après il ne faut pas oublier de vérifier la valeur de retour de new pour éviter les erreurs éventuelles.

  4. #4
    Membre averti
    Femme Profil pro
    Ingénieur informatique scientifique
    Inscrit en
    Mai 2010
    Messages
    313
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur informatique scientifique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2010
    Messages : 313
    Points : 301
    Points
    301
    Par défaut
    Merci pour vos réponses rapides!

    Effectivement il suffisait de rajouter "std::"... j'aurais du y penser!
    Je ne savais pas pour la syntaxe des "struct", à vrai dire je ne fais que modifier un gros programme existant depuis quelques années, ce qui explique que je tombe sur des anciennes syntaxes!
    Je préfère utiliser un vector plutôt que new, car cela me permet de rajouter des cases dans mon tableau au fur et à mesure que je lis mon fichier, avec push_back.

    Merci encore!

  5. #5
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    Citation Envoyé par Mipwiq Voir le message
    Pour déclarer un tableau dynamique en c++ tu peux utiliser new.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int *tab;
    tab = new (int[10]); //allocation de 10 case de la taille de int
    Pour les tableau on utilise, il me semble :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    variable = new int[10];
    Et pour supprimer :
    Mais de manière générale, on préférera souvent std::vector et std::array (C++11).

    Ensuite, il faut faire attention car tu ne pourras pas modifier la taille de ton tableau alloué avec new.

    Et c'est la même méthode pour chaque type de variable, après il ne faut pas oublier de vérifier la valeur de retour de new pour éviter les erreurs éventuelles.
    Non, new renvoie une exception (sauf si on spécifie explicitement qu'on veut que new retourne une valeur en cas d'erreur cf FAQ C++).

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

Discussions similaires

  1. Réponses: 35
    Dernier message: 04/06/2012, 12h38
  2. problème d'initialisation d'un tableau de structure
    Par hamma2 dans le forum Débuter
    Réponses: 1
    Dernier message: 08/03/2010, 19h26
  3. tableau de structures dynamiques C# vers C++
    Par MottetCCSF dans le forum C#
    Réponses: 1
    Dernier message: 17/07/2009, 07h43
  4. Allocation dynamique tableau dans structure
    Par chental dans le forum C
    Réponses: 2
    Dernier message: 03/08/2006, 09h03

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