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 :

declaration de variable dans un saut conditionnel


Sujet :

C++

  1. #1
    Membre confirm�
    Inscrit en
    Ao�t 2008
    Messages
    135
    D�tails du profil
    Informations forums :
    Inscription : Ao�t 2008
    Messages : 135
    Par d�faut declaration de variable dans un saut conditionnel
    bonjour,
    je comprend mon erreur, je me demande juste s'il y'a un moyen de faire ce que je veu proprement:

    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
    if (type == "A") 
         {
                  map<llint, double>::const_iterator iter;
                  iter = a.end(); //menmbre prive d'une class dont cette fonction fait patie
                  }
         else
         {
                   map<llint, complet>::const_iterator iter;
         }
     
         if (type == "B") iter = b.end();
         if (type == "C") iter = c.end();
         if (type == "D") iter = d.end();
     
         curend = iter->first;
    a la compilation, on me retourne que dans la ligne
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
     if (type == "B") iter = b.end();
    iter n'est pas declarer.
    y'a t'il un moyen de declarer une variable
    "dans une boucle conditionnel (if) qui aurai une poter globale (dans toute la fonction)"


    je m'excuse d'avance, je suis passablement fatigue,
    si vous avez besoin de presision n'hesiter pas.

    merci

  2. #2
    Expert confirm�
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    D�cembre 2003
    Messages
    3 549
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (�le de France)

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

    Informations forums :
    Inscription : D�cembre 2003
    Messages : 3 549
    Par d�faut
    Ben d�j� tu peux faire
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    map<llint, double>::const_iterator iter;
     
    if (type == "A") iter = a.end();                  
    if (type == "B") iter = b.end();
    if (type == "C") iter = c.end();
    if (type == "D") iter = d.end();
    Tu peux aussi ne pas avoir besoin du constructeur par d�faut si tu con�ois ton code autrement.

    Par contre, iter->first c'est forc�ment mauvais : d�r�ferencer un it�rateur past-the-end est un comportement ind�fini.

  3. #3
    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
    Par d�faut
    L'utilisation de boost Variant peut �tre une solution:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    boost::variant<map<llint, double>::const_iterator, map<llint, complet>::const_iterator> iter;
     
    if (type == "A")
    {
       iter = a.end(); //menmbre prive d'une class dont cette fonction fait patie
    }
    else
    {
         if (type == "B") iter = b.end();
         if (type == "C") iter = c.end();
         if (type == "D") iter = d.end();
    }

  4. #4
    Membre confirm�
    Inscrit en
    Ao�t 2008
    Messages
    135
    D�tails du profil
    Informations forums :
    Inscription : Ao�t 2008
    Messages : 135
    Par d�faut
    merci loufoque, mais je peu vraiment pas tous metre en <llint, double>.

    3Darchi, je connai pas boost,je voudrai alors savoir si l'utilisation de
    boost::variant
    m'oblige a modifier quelque chose d'autre dans le reste du code??

  5. #5
    Membre confirm�
    Inscrit en
    Ao�t 2008
    Messages
    135
    D�tails du profil
    Informations forums :
    Inscription : Ao�t 2008
    Messages : 135
    Par d�faut
    Par contre, iter->first c'est forc�ment mauvais : d�r�ferencer un it�rateur past-the-end est un comportement ind�fini.
    mauvais?? en quoi c'est mal, ou alors comment on fait pour r�cup�rer la valeur??

  6. #6
    Expert confirm�

    Inscrit en
    Novembre 2005
    Messages
    5 145
    D�tails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par d�faut
    Citation Envoy� par neismarspra Voir le message
    "dans une boucle conditionnel (if) qui aurai une poter globale (dans toute la fonction)"
    Le probleme est que tu as l'air de desirer qu'une variable, iter, ait deux types differents. Ca c'est pas possible, il faut changer ta conception. Parmi les pistes de solution:
    - virer la raison pour laquelle iter devrait avoir deux types differents :-) Difficile de dire plus la dessus avec ce qu'on sait.
    - passer a un typage dynamique pour iter. boost::variant est le plus simple a mettre en oeuvre si tu utilises deja boost, quelque chose d'autre pourrait etre mieux (une classe de base et deux classes derivees,...), mais a nouveau ce genre de choix s'effectue en connaissant l'utilisation.
    - utiliser des templates et garder un typage statique. Difficile encre de dire plus sans en savoir plus sur l'utilisation d'iter.

  7. #7
    Membre confirm�
    Inscrit en
    Ao�t 2008
    Messages
    135
    D�tails du profil
    Informations forums :
    Inscription : Ao�t 2008
    Messages : 135
    Par d�faut
    merci,

    j'utilise pas boost, mais je prend note.

    J'avais pas penser au template. Je crois que ce serra mon choix.

    entre temps j'ai utiliser la m�thode cochon.

    merci a tous.

  8. #8
    Expert confirm�
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    D�cembre 2003
    Messages
    3 549
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (�le de France)

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

    Informations forums :
    Inscription : D�cembre 2003
    Messages : 3 549
    Par d�faut
    mauvais?? en quoi c'est mal
    Je l'ai d�j� dit, comportement ind�fini.

    alors comment on fait pour r�cup�rer la valeur??
    map<llint, double> iter = a.end();
    iter--;

    par exemple.
    Tu peux aussi passer par un reverse iterator, a.rbegin()

Discussions similaires

  1. [D�butant] declarer plusieurs variables dans une boucle possible?
    Par membreComplexe12 dans le forum MATLAB
    R�ponses: 35
    Dernier message: 23/02/2010, 18h08
  2. Declaration de variables dans un boucle
    Par Nohatred dans le forum C
    R�ponses: 17
    Dernier message: 07/09/2006, 10h51
  3. R�ponses: 2
    Dernier message: 17/12/2005, 20h52
  4. Problème déclaration de variable dans un package
    Par LE NEINDRE dans le forum Modules
    R�ponses: 3
    Dernier message: 23/08/2005, 18h26
  5. declarer une variable dans le query analyzer
    Par graphicsxp dans le forum MS SQL Server
    R�ponses: 8
    Dernier message: 29/03/2005, 11h26

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