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 :

Probleme insertion objet dans tableau


Sujet :

C++

  1. #1
    Membre du Club
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Novembre 2008
    Messages
    130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2008
    Messages : 130
    Points : 48
    Points
    48
    Par défaut Probleme insertion objet dans tableau
    Bonjour,
    lorsque j'insert mes objet employes depuis le fichier et en faisant un constructeur au debut de mon logiciel et que je l'ai ajoute directement cela marche, mais lorsque j'utilise le menu 1 et et j'affiche par la suite la liste des employes; le dernier que je viens d'inseré avec le menu 1 m'affiche n'importe quoi ... J'essaie d'etre le plus clair possible : Voici les code existant :
    Methode qui marche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    class Cemploye UnEmp("Jean",350,8.7,35);
        class Cemploye UnEmp2("Bernard",352,8.9,35);
        BDD.ajoutEmp(UnEmp);
        BDD.ajoutEmp(UnEmp2);
    Methode qui ne marche 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
    case 1 : 
                              {
                                  cout << " Choix 1 \n\n";
                                  cout << " Matricule : ";
                                  cin >> xMat;
                                  cout << " Nom : ";
                                  cin >> xNom;
                                  cout << " Taux : ";
                                  cin >> xTaux;
                                  cout << " Nb Heures : ";
                                  cin >> xHeures;
     
                                  Cemploye UnEmp(xNom,xMat,xTaux,xHeures);
                                  BDD.ajoutEmp(UnEmp);
     
     
                                  cout << "\n\n Employe insere ... \n\n";
     
                              }
                                  break;
    Et sinon voici le procedure ajoutEmp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void Cbdd::ajoutEmp(class Cemploye Emp)
    {
         Ctab[CnbEmp]=Emp;
         CnbEmp=CnbEmp+1;
    }
    D'ou viendrait le problème? Merci de vos réponses.

  2. #2
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Salut,
    Qu'est ce que BDD? La variable ne serait-elle pas passée par valeur ?

  3. #3
    Membre du Club
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Novembre 2008
    Messages
    130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2008
    Messages : 130
    Points : 48
    Points
    48
    Par défaut
    Si en faite je suis un peu bete la dessus j'ai initialisé une variable BDD alors que je suis déja la classe BDD.

    Donc il fallait juste enleve le "BDD.".
    Voila ce qui marche : ajoutEmp(UnEmp)

    Merci de vos réponses.

  4. #4
    Membre chevronné
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Points : 2 107
    Points
    2 107
    Par défaut
    D'ailleurs, tu mets le mot "class" partout, alors qu'il n'y en a pas besoin...

    Et on ne peut pas déclarer une variable ou classe dans un switch / case. D'où ton plantage !

  5. #5
    Membre confirmé
    Inscrit en
    Août 2004
    Messages
    556
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 556
    Points : 588
    Points
    588
    Par défaut
    Citation Envoyé par poukill Voir le message
    Et on ne peut pas déclarer une variable [...] dans un switch / case.
    Euh... si je dis que si, on peut, je ments ? :o

    Sinon, pour le posteur initial, il nous faudrait plus de code afin de t'aider car là on peut pas dire d'où vient le problème exactement (à part que tu mets des class un peu n'importe où)

  6. #6
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Citation Envoyé par JulienDuSud Voir le message
    Euh... si je dis que si, on peut, je ments ? :o
    Oui et non. Il faut déclarer un bloc dans le case pour déclarer une variable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    switch(...)
    {
    case CAS_1 :
        int var; // Erreur
    break;
    case CAS_2:
    {
        int var;//Ok
    }
    break;
    }

  7. #7
    Membre confirmé
    Inscrit en
    Août 2004
    Messages
    556
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 556
    Points : 588
    Points
    588
    Par défaut
    J'ai jamais dit le contraire :p
    Mais dans le cas posé par le posteur original, il y a bien un bloc

  8. #8
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 612
    Points : 30 611
    Points
    30 611
    Par défaut
    Citation Envoyé par 3DArchi Voir le message
    Oui et non. Il faut déclarer un bloc dans le case pour déclarer une variable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    switch(...)
    {
    case CAS_1 :
        int var; // Erreur
    break;
    case CAS_2:
    {
        int var;//Ok
    }
    break;
    }
    Et il ne faut pas oublier le problème principal lorsque l'on agit de la sorte:

    La variable déclarée dans le bloc est automatiquement détruite lorsque l'on quitte la portée de ce bloc (lorsqu'on arrive à l'accolade fermante)

    Ce n'est donc pas erroné à proprement parler, mais, il faut avouer que l'usage que l'on peut envisager de cette variable est, ..mettons, pour être gentil,... particulièrement réduit
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  9. #9
    Membre confirmé
    Inscrit en
    Août 2004
    Messages
    556
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 556
    Points : 588
    Points
    588
    Par défaut
    Citation Envoyé par koala01 Voir le message
    Et il ne faut pas oublier le problème principal lorsque l'on agit de la sorte:

    La variable déclarée dans le bloc est automatiquement détruite lorsque l'on quitte la portée de ce bloc (lorsqu'on arrive à l'accolade fermante)

    Ce n'est donc pas erroné à proprement parler, mais, il faut avouer que l'usage que l'on peut envisager de cette variable est, ..mettons, pour être gentil,... particulièrement réduit
    ???
    Toutes les variables locales en C++ fonctionnent de la même manière.
    De quelle utilité réduite parles-tu ?

  10. #10
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 612
    Points : 30 611
    Points
    30 611
    Par défaut
    Citation Envoyé par JulienDuSud Voir le message
    ???
    Toutes les variables en C++ fonctionnent de la même manière (excepté les exceptions et les membres de classes).
    De quelle utilité réduite parles-tu ?
    Toute variable créée statiquementest automatiquement détruite lorsque l'on quitte la portée dans laquelle elle est déclarée, c'est la norme...

    Pour ce qui est des membres de classes, ils sont détruits lorsque l'instance est détruite
    Pour t'en convaincre, essaye de compiler ce code tout simple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    int main()
    {
        int  i = 1;
        {
            int val = 10;
        }
        cout<<val; //cette ligne sera refusée "val" n'est pas déclaré
        return 0;
    }
    Cela peut d'ailleurs poser des problèmes si tu envisage l'utilisation de l'allocation dynamique:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    {
        Type* ptr= new Type;
        /*...*/
    } /*ptr n'existe plus, mais la mémoire allouée n'a pas été libérée */
    Le cas des exceptions est un peu particulier, mais cela fonctionne de manière équivalente, et c'est grâce à un système complexe qu'il est possible de les récupérer
    [EDIT]J'oubliais de répondre à la dernière question:

    Si je parle d'utilité plutôt réduite, c'est parce que la variable n'est utilisable que... dans le bloc où elle est déclarée, c'est à dire, généralement, pour quelques lignes de code à peine
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  11. #11
    Membre confirmé
    Inscrit en
    Août 2004
    Messages
    556
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 556
    Points : 588
    Points
    588
    Par défaut
    Citation Envoyé par koala01 Voir le message
    [...]
    Merci, j'en sais au moins autant
    Ce que je voulais dire, c'est qu'une variable dans un bloc dans un case fonctionne de la même manière que n'importe quelle autre variable locale, c'est à dire qu'elle est limitée à sa portée. Ca n'empêche qu'on les utilise, ma question était: quelle utilité réduite y vois-tu ?

    Edit suite à ton edit: Ah, dans ce sens
    Je n'avais pas compris tout de suite, car pour moi, l'utilité d'une variable ne se résume pas à sa portée
    Surtout qu'ici, c'est une variable créer pour but d'être copiée dans un conteneur, donc son utilité réelle peut être étendue à la durée de vie de la dite copie dans le contenur

    Bon, j'arrête le hors-sujet, ça commence à devenir un peu pathétique cette pseudo-dispute

  12. #12
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 612
    Points : 30 611
    Points
    30 611
    Par défaut
    Bah, le fait qu'elle ne peut donc servir, comme toute variable "super locale" (comprend: déclarée dans une portée particulièrement réduite), que comme variable temporaire au sein de la portée dans laquelle elle est déclarée ...

    Il faut avouer que, dans le cadre d'un test à choix multiple, cela ne représentera fatalement qu'un nombre très limité d'instructions pour lesquelles l'utiliser

    J'ai peut être mal exprimé ce fait: l'utilité de cette variable peut être importante dans la logique, mais l'usage (le nombre d'instructions dans lesquelles elle est utilisée) qui en est fait est forcément restreint
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

Discussions similaires

  1. probleme insertion formule dans cellule via vba
    Par moxo01 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 20/06/2008, 12h06
  2. Probleme insertion données dans base ACCESS
    Par Ice-tea dans le forum SGBD
    Réponses: 7
    Dernier message: 20/08/2007, 15h38
  3. Insertion image dans tableau
    Par tidoc dans le forum VB.NET
    Réponses: 2
    Dernier message: 30/07/2007, 12h28
  4. Probleme de IFRAME dans tableau IE et Firefox
    Par ryuhunter dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 16/05/2007, 23h14
  5. Insertion javascript dans tableau HTML
    Par Rocca dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 08/08/2005, 13h28

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