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 :

declarer une structure dans le main


Sujet :

Langage C++

  1. #1
    Membre du Club
    Inscrit en
    Février 2011
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 188
    Points : 51
    Points
    51
    Par défaut declarer une structure dans le main
    salut,

    j'ai une classe C comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    #ifndef C_H
    #define C_H
    #include <vector>
    using namespace std;
    class C
    {
        struct structure
        {
            int a;
        };
        vector <strucure*> vstruct;
    };
    #endif
    Dans la fonction main() je veux remplir le vecteur vstruct mais j'ai toujours des erreurs de compilation. Voilà un de mes essais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    #include "C.h"
    int main()
    {
        structure* st=new structure;
        st->a=1;
        C c; // c une variable de type C
        c.vstruct.pushback(st);
    }
    J'aimerais savoir l'erreur dans ce code et merci d'avance.

  2. #2
    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 : 61
    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
    Points : 50 367
    Points
    50 367
    Par défaut
    A tout hasard, tu ne nous mettrais pas le texte du code d'erreur généré par le compilateur, cela nous permettrait de mieux t'aider. Je suppute un truc dans le genre "cannot acces private member" car la visibilité d'un objet déclaré dans une classe est par défaut private.
    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
    .

  3. #3
    Membre du Club
    Inscrit en
    Février 2011
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 188
    Points : 51
    Points
    51
    Par défaut
    Merci pour la rapidité de la réponse.
    Non, la cause du problème n'est pas le mot "private" car ma strucure est public.
    En fait, le code est :

    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
     
    #ifndef C_H
    #define C_H
    #include <vector>
    using namespace std;
    class C
    {
    public :
        struct structure
        {
            int a;
        };
        vector <strucure*> vstruct;
    };
    #endif
     
    et la fct main :
     
    #include "C.h"
    struct structure;
    int main()
    {
        structure* st=new structure;
        st->a=1;
        C c; // c une variable de type C
        c.vstruct.pushback(st);
    }
    les erreurs sont :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    error C2027: utilisation du type non défini 'structure' 
    voir la déclaration de 'structure'
    la partie gauche de '->a' doit pointer vers un type class/struct/union/générique
     
    error C2664: 'void std::vector<_Ty>::push_back(_Ty &&)'*: impossible de convertir le paramètre 1 de 'structure *' en 'C::structure *&&'
              with
              [
                  _Ty=C::structure *
              ]
              Raison*: impossible de convertir de 'structure *' en 'C::structure *'
              Les types pointés n'ont aucun rapport entre eux*; conversion nécessitant reinterpret_cast, cast de style C ou cast de style fonction
    le dernier erreur concerne la ligne du code suivante : c.vstruct.pushback(st);

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Si ça s'apelle strucure dans la définition et que tu essayes d'utiliser structure comme mot-clé, ça passera pas.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  5. #5
    Membre du Club
    Inscrit en
    Février 2011
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 188
    Points : 51
    Points
    51
    Par défaut
    'Si ça s'apelle strucure dans la définition et que tu essayes d'utiliser structure comme mot-clé, ça passera pas.
    j'ai pas compris le problème. Merci de m'expliquer plus.

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

    On recommence :
    Citation Envoyé par Bousk Voir le message
    Si ça s'apelle strucure dans la définition et que tu essayes d'utiliser structure comme mot-clé, ça passera pas.
    Pense à copier/coller correctement ton code la prochaine fois. Il ne correspond pas au message d'erreur.

  7. #7
    Membre du Club
    Inscrit en
    Février 2011
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 188
    Points : 51
    Points
    51
    Par défaut
    ok c'est struct structure.

    Quel est l'erreur dans mon code? Est ce que j'ai le droit d'utiliser ma structure déclarée dans C.h dans la fonction main?

  8. #8
    Invité
    Invité(e)
    Par défaut
    Une fois structure corrigé, il en reste plusieurs :
    > g++ -Wall -Wextra main.cpp -c
    main.cpp: In function 'int main()':
    main.cpp:5:23: error: invalid use of incomplete type 'struct structure'
         structure* st=new structure;
                           ^
    main.cpp:2:8: error: forward declaration of 'struct structure'
     struct structure;
            ^
    main.cpp:6:7: error: invalid use of incomplete type 'struct structure'
         st->a=1;
           ^
    main.cpp:2:8: error: forward declaration of 'struct structure'
     struct structure;
            ^
    main.cpp:8:15: error: 'class std::vector<C::structure*>' has no member named 'pushback'
         c.vstruct.pushback(st);
                   ^
    La ligne struct structure; est à supprimer, elle n'a aucunement sa place ici.

    pushback lui est inconnu car c'est c.vstruct.push_back(st);.

    structure est interne à ta classe C, tu ne peux pas l'utiliser ainsi toute seule à l'extérieur. Rajoute C:: devant.

    Enfin, concernant la ligne using namespace std; dans ton header, je te conseille de lire ce sujet de la FAQ.

  9. #9
    Membre du Club
    Inscrit en
    Février 2011
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 188
    Points : 51
    Points
    51
    Par défaut
    Merciiiii pour le lien ainsi pour toute la réponse.
    structure est interne à ta classe C, tu ne peux pas l'utiliser ainsi toute seule à l'extérieur. Rajoute C:: devant.
    cette remarque que j'essaye de la chercher tout au long cette discussion.

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

Discussions similaires

  1. Declarer une structure dans une classe
    Par sub-0 dans le forum Débuter
    Réponses: 5
    Dernier message: 01/11/2009, 17h03
  2. Declarer une structure dans une methode
    Par Invité dans le forum Débuter
    Réponses: 2
    Dernier message: 08/12/2008, 22h59
  3. declaration d'une structure dans la class TForm1
    Par mdtdamien dans le forum C++Builder
    Réponses: 1
    Dernier message: 15/02/2006, 18h51
  4. Ecrire l'adresse d'une structure dans un uint32
    Par Steph12 dans le forum C++
    Réponses: 6
    Dernier message: 17/03/2005, 16h31
  5. [MFC] Passage d'une structure dans une method
    Par KPitN dans le forum MFC
    Réponses: 5
    Dernier message: 18/06/2004, 10h11

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