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 :

Tableau contenant les noms d'une structure.


Sujet :

Langage C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mars 2010
    Messages
    62
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Mars 2010
    Messages : 62
    Par défaut Tableau contenant les noms d'une structure.
    Bonjour, j'ai un petit problème que je n'arrive pas du tout a résoudre:

    J'ai déclarer une structure dans un header:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    struct Calculateur
    {
    	char AdresseEmmission;
    	char AdresseReception;
    	char SeedValue; 
    };
    Dans un fichier source je creer les structure:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Calculateur CTR2, CTR3, CSFA, CREH, CDSB, CTCU;
    Je veux creer dans ce fichier source un tableau contenant les différents nom des structure:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tabnamestruct[6]={CTR2, CTR3, CSFA, CREH, CDSB, CTCU};
    Je ne sais pas du tout comment le creer je veux dire avec quel type car j'ai essayer de faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Calculateur tabnamestruct[6]={CTR2, CTR3, CSFA, CREH, CDSB, CTCU};
    Mais ça ne fonctionne pas car il s'attend a avoir un tableau de structure or le but de ce tableau et de pouvoir avoir les NOMS des structure pour pouvoir les utiliser dans une boucle facilement.

    Je vous remercie d'avoir lus mon message.
    Et vous souhaite une bonne journée.

  2. #2
    Membre émérite Avatar de Steph_ng8
    Homme Profil pro
    Doctorant en Informatique
    Inscrit en
    Septembre 2010
    Messages
    677
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Doctorant en Informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 677
    Par défaut
    Bonjour,
    Je ne pense pas avoir compris ce que tu veux faire.

    Je vois une structure, dont le nom est « Calculateur », et des noms de variables.
    Je ne vois pas ce que tu entends par « les NOMS des structure ».

    Et puis, puisque tes structures sont stockées dans un tableau, tu peux les utiliser dans une boucle facilement, je ne vois pas le problème.
    Par contre, vu comment tu les déclarées et stockées, chacune d'entre elles est dupliquée.

  3. #3
    Membre chevronné Avatar de seeme
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    430
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 430
    Par défaut
    Citation Envoyé par Steph_ng8 Voir le message
    Bonjour,
    Je ne pense pas avoir compris ce que tu veux faire.

    Je vois une structure, dont le nom est « Calculateur », et des noms de variables.
    Je ne vois pas ce que tu entends par « les NOMS des structure ».

    Et puis, puisque tes structures sont stockées dans un tableau, tu peux les utiliser dans une boucle facilement, je ne vois pas le problème.
    Par contre, vu comment tu les déclarées et stockées, chacune d'entre elles est dupliquée.
    Je crois qu'il veut stocker le nom de la variable qui désigne la structure dans un tableau. D'expérience, quand on cherche à faire ça, c'est qu'on ne sait pas trop où on va (et qu'on ne connais pas très bien le C...).

    Que cherches-tu à faire exactement? Tu vas en faire quoi de tes noms de structures? Que se passe-t-il si un autre dev change le nom d'une des variables?

  4. #4
    Membre confirmé
    Inscrit en
    Mars 2010
    Messages
    62
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Mars 2010
    Messages : 62
    Par défaut
    Dupliquée?
    Enfaite pour les besoins de mon programme j'aurais besoin d'un tableau comprenant les noms des structures seulement:
    Ceque j'appelle nom de structures c'est : CTR2 CTR3,...
    Le problème c'est que si je fait un tableau de structure ça me déclare pour chaque "case" du tableau AdresseEmmission AdresseReception et SeedValue or moi je ne veux que les noms des structures.

    Je ne sais pas si je suis clair.

    Mais en gros dans une boucle pour les besoins de mon programme j'aimerais pour voir utilisé tabname comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    boucle for j
    {
       tabname[j].AdresseEmmission=...;
    }
     
    boucle for j
    {
       tabname[j].Adressereception=...;
    }
     
    boucle for j
    {
       tabname[j].Seedvalue=...;
    }
    Je pense savoir ou je vais ou en tout cas ce que je veux, il y a surement un moyen plus simple de le faire mais je ne trouve pas. Nouvelle en C

  5. #5
    Membre chevronné Avatar de seeme
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    430
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 430
    Par défaut
    Donc je pense qu'il y a confusion (ou alors je n'ai pas compris ton problème )

    Si tu veux faire ce que tu décris, tu peux stocker un pointeur vers la structure dans ton tableau.


    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
     
    Calculateur* CTR2, *CTR3, *CSFA, *CREH, *CDSB, *CTCU;
    //Les malloc qui vont bien
     
    Calculateur* tabnamestruct[6]={CTR2, CTR3, CSFA, CREH, CDSB, CTCU};
     
    boucle for j
    {
       tabname[j]->AdresseEmmission=...;
    }
     
    boucle for j
    {
       tabname[j]->Adressereception=...;
    }
     
    boucle for j
    {
       tabname[j]->Seedvalue=...;
    }
     
    //les free qui vont bien

    edit: je viens de voir qu'on est dans la section c++... Alors pourquoi ne pas faire... du C++??

  6. #6
    Membre confirmé
    Inscrit en
    Mars 2010
    Messages
    62
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Mars 2010
    Messages : 62
    Par défaut
    Oui du C++...enfaite mon rpogramme est en C++ mais je confons un peu tout a vrai dire.

    L'autre problème est que ce traitement est seulement pour une fonction et ensuite dans tout le reste du programme j'utilise les structure comme cela par exemple:

    fonction(CTR2.AdresseEmmission;....)

    En les déclarant avec des poiteurs ça va me changer la façon dont je les utilisent dans mon programme n'est ce pas?

    Je suis vraiment désolé si mes questions parraissent bêtes je fais tout pour comprendre.

    en tout cas merci de me répondre.

    Sinon j'ai des erreurs avec ce que j'ai fait de cetype pourtant j'ai fait ce que vous m'avez dit mais ne doi-je pas changer la déclaration de ma structure?:
    C'est cette ligne qui est en cause:
    Calculateur* tabnamestruct[6]={CTR2, CTR3, CSFA, CREH, CDSB, CTCU};code]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    c:\documents and settings\recuperation_calculateursdlg.cpp(423) : e
    rror C2440: 'initializing' : cannot convert from 'struct Calculateur' to 'struct Calculateur *'
            No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called

  7. #7
    Membre chevronné Avatar de seeme
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    430
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 430
    Par défaut
    Mais comment faisais-tu pour passer tes structures aux différentes fonctions? Si ce sont des globales, c'est très maaaaal. Si tu les passes par valeur aussi c'est très maaaal.


    J'explique un peu..

    Les variables dont le scope est global c'est mal dans 99% des cas: on ne sait plus qui fait quoi dessus (et dans le cas de pointeur, si quelque part on le delete, ça va coller un joyeux bazard dans la suite du programme..).

    Le passage par valeur, c'est maaal dans 99% des cas (pour ce type de variables), vu que si ta structure grandit, à chaque appel, tu vas empiler tes structures pour au final avoir des débordement ou des lenteurs.

    Le mieux serait: au début du programme, créer un tableau de pointeurs vers tes structures, faire tes appels en passant en paramètre ton tableau, et à la fin du programme libérer la mémoire allouée.

    Après je réitère, si tu veux faire du C++, tu crées une class Calculateur, tu mets des pointeurs vers tes instances dans un container et tu fais tes calculs dessus.


    J'ai fait une petite erreur dans mon post précédent:
    Calculateur *c1, *c2, ...

  8. #8
    Membre émérite Avatar de Steph_ng8
    Homme Profil pro
    Doctorant en Informatique
    Inscrit en
    Septembre 2010
    Messages
    677
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Doctorant en Informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 677
    Par défaut
    Citation Envoyé par LiaGalanodel Voir le message
    Ceque j'appelle nom de structures c'est : CTR2 CTR3,...
    Attention, CTR2 est une variable de type Calculateur, et dont le nom est (la chaîne de caractères) « CTR2 ».
    Il n'y a qu'un seul nom de structure, et c'est (la chaîne de caractères) « Calculateur ».

    Je pense que tu parles plutôt soit des variables, soit du nom des variables.
    Si tu veux stocker les variables dans un tableau, c'est ce qui est écrit depuis le début.
    Si tu veux stocker leur nom, c'est quelque chose comme ça qu'il faudrait écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char * tabstructname[] = {"CTR2", "CTR3", ...};
    Seulement, à ma connaissance, on ne peut pas accéder au contenu d'une variable à partir de son nom en C/C++ (en PHP par exemple, on peut).

    Edit: Enfin si, on peut peut-être. Mais ce n'est pas du tout trivial, et d'après ce que j'ai compris, pas portable.

  9. #9
    Membre émérite Avatar de Steph_ng8
    Homme Profil pro
    Doctorant en Informatique
    Inscrit en
    Septembre 2010
    Messages
    677
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Doctorant en Informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 677
    Par défaut
    Sinon, une classe ce n'est pas beaucoup plus compliqué qu'une structure, sauf qu'on peut déclarer (voire définir) des fonctions (membres) directement dans le corps de la classe.
    Bon, en réalité, en C++ les mots-clés « class » et « struct » sont quasiment équivalents, mais on ne va pas entrer dans les détails…

    Si ce n'est pas déjà fait, tu devrais aller faire un tour dans la FAQ pour avoir plus d'informations sur la manière d'écrire le code d'une classe, ou sur les containers (en français, conteneurs).

    En parlant de conteneur, puisque tu dois y stocker tes objets, pourquoi ne pas l'utiliser partout dans ton code, et ne pas t'embêter avec de multiples variables ?
    On peut accéder aux objets stockés à l'aide de l'opérateur [] (à condition de bien savoir ce que l'on fait) ou des fonctions d'accès (at pour std::vector), tant en lecture qu'en écriture.
    Enfin si le conteneur est déclaré constant, c'est râpé pour l'écriture.

    Si tu as absolument besoin de noms explicites, tu peux créer une variable qui pointe sur l'élément stocké dans le conteneur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #include <vector>
     
    (...)
     
    std::vector<Calculateur> tab;
    // Remplissage du vecteur
    tab.push_back(...);
     
    (...)
     
    Calculateur & CTR2 = tab[0];
    // Ou, si tu n'es pas à l'aise avec les références :
    Calculateur * CTR2 = &tab[0];
    // Et ainsi de suite...

  10. #10
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Je vais rebondir sur ce qu'a expliqué Steph.
    Il faut distinguer "Non de structure" et "Valeur d'un membre de structure".
    Dans le premier bout de code
    Code :

    struct Calculateur
    {
    char AdresseEmmission;
    char AdresseReception;
    char SeedValue;
    };
    les membres AdresseEmission etc sont de char
    Un char est un type sur 8 bits, c'est à dire qu'il peut contenir 1 caractère, et c'est tout.
    La dimension de la structure Calculateur est donc de 3 octets.
    Si j'avais un conseil à donner, ce serait de définir ce qu'on veut faire avant d'écrire la moindre ligne de code. Le terme "structure" étant directement lié au code, il ne devra pas être utilisé dans la description de ce qu'il faut faire.

  11. #11
    Membre confirmé
    Inscrit en
    Mars 2010
    Messages
    62
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Mars 2010
    Messages : 62
    Par défaut
    Bon j'ai encore un souci dans mon programme mais ça n'a rien a voir avec cette question là.

    Merci a vous deux! Vous m'avez vraiment bien aidé!
    Et j'ai réussis a faire fonctionner cette partie du programme.

    Je suis vraiment contente (d'avoir en plus compris ce que j'ai fait).

    Merci de votre patiente et je vous souhaite une bonne après midi et bonne continuation!

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 30/04/2008, 11h39
  2. Réponses: 2
    Dernier message: 04/04/2008, 12h54
  3. [MySQL] remplir un tableau avec les noms des champs d'une table
    Par solidaritok dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 05/04/2007, 13h47
  4. [SQL] problème de variable tableau PHP contenant les données d'une jointure SQL
    Par Schpountz42 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 09/02/2007, 05h59
  5. Récupérer les élements d'une structure ...
    Par Franck.H dans le forum GTK+ avec C & C++
    Réponses: 6
    Dernier message: 17/10/2005, 15h48

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