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++Builder Discussion :

Erreur sur un case


Sujet :

C++Builder

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    934
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 934
    Par défaut Erreur sur un case
    Bonjour à tous

    j'ai une erreur sur un case et je ne comprend pas de quoi elle viens.

    voilà le code de ma fonction

    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
     
    // Méthode déclancher lorsque l'on clique sur le menu Pics
    void __fastcall TPrincipalForm::PicsClick(TObject *Sender)
    {
            switch (ModeAffichage)
            {
                    case FENETRAGE :
                            // On extrait l'onglet courant
                            TOnglet *Onglet = (TOnglet *)(PageControl->Pages[FenetreActive]);
     
                            // Si le PanelClis de l'onglet est visible
                            if(Onglet->PanelPics->Visible)
                            {
                                    // On rend le PanelPics Invisible
                                    Onglet->PanelPics->Visible = false;
     
                                    // On décoche le menu
                                    Pics->Checked = false;
     
                                    // On marque que le menu de l'onglet n'est plus coché
                                    Onglet->MenuPicsCoche = false;
                            }
                            // Sinon il n'est pas coché
                            else
                            {
                                    // On rend le PanelPics Visible
                                    Onglet->PanelPics->Visible = true;
     
                                    // On coche le menu
                                    Pics->Checked = true;
     
                                    // On marque que le Menu Pics de l'onglet est coché
                                    Onglet->MenuPicsCoche = true;
                            }
     
                            break;
     
                    // Si l'on est en mode d'affichage de la FFT
                    case FFT :
                            // Si le Panel de pics est visible
                            if(PanelPicsVisible)
                            {
                                    // On le rend invisible
                                    PanelPics->Visible = false;
     
                                    // On met le booléen à faux
                                    PanelPicsVisible = false;
     
                                    // On décoche le menu
                                    Pics->Checked = false;
                            }
                            // Sinon il est invisible
                            else
                            {
                                    // On le rend Visible
                                    PanelPics->Visible = true;
     
                                    // On met le booléen à vrai
                                    PanelPicsVisible = true;
     
                                    // On coche le menu
                                    Pics->Checked = true;
                            }
     
                            break;
     
            }
    }
    C'est le code déclancher lorsque l'on clique sur un élément de menu.
    Cette méthode est chargée de rendre visible un Panel (Deux cas possible
    le panelPics de l'application si l'on est en mode FFT, sinon le PanelPics de mon onglet si l'on est en mode FENETRAGE.

    Or, j'ai une erreur sur le case FFT :

    [C++ Erreur] FormPrincipale.cpp(1357): E2126 Case a contourné l'initialisation d'une variable locale

    Je ne comprend pas pourquoi car j'utilise la meêm structure pour une autre fonction et là il n'y a pas de problème.

    L'erreur semble venir de l'extraction de mon Onglet car quand je met tout le contenu du premier case en commentaire, il n'y a plus d'erreur.

    Merci d'avance pour votre aide.

  2. #2
    Membre éclairé Avatar de BOUBOU81
    Profil pro
    system integrator
    Inscrit en
    Juin 2004
    Messages
    358
    Détails du profil
    Informations personnelles :
    Localisation : Allemagne

    Informations professionnelles :
    Activité : system integrator

    Informations forums :
    Inscription : Juin 2004
    Messages : 358
    Par défaut
    simplement car tu fais ceci TOnglet *Onglet et que tu n'as pas les accolades.

    fais ton case comme ceci et ça devrait regler ton probleme.
    case 1:
    {
    }
    break;
    case 2:
    {
    }
    break;
    ...

  3. #3
    Membre Expert Avatar de rtg57
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2006
    Messages
    1 341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 341
    Par défaut
    Bonjour,

    dans le ' case FENETRAGE: ' tu positionnes ton pointeur TOnglet *Onglet = ....




    Par contre dans le ' case FFT ', il n'y a pas le positionnement du pointeur.

    Alors il est vrai que dans le ' case FFT ', tu n'utilises pas le pointeur.
    Mais je pense que le compilateur n'apprécie pas qu'un pointeur puisse être positionné dans un 'case' et pas un autre.

    Ce que tu peux faire, c'est au moins positionner le pointeur Onglet à la valeur NULL avant d'attaquer le switch / case
    Comme ça, le compilateur ne se méfiera pas trop. Il est attentif à l'utilisation éventuelle d'un pointeur qui n'a pas été explicitement positionné.

    S'il ne te fais pas la remarque quand tu mets tout le contenu du 1er case en commentaire, c'est parce que le compilateur constate que tu n'utilises pas le pointeur Onglet dans ta procédure.
    Donc il ne compile pas la variable, ce qui permet d'économiser de la place sur la pile de stockage des variables locales.
    Et du coup, il n'y a plus de problème d'initialisation de pointeur puisqu'il n'existe plus dans la liste des variables locales.

  4. #4
    Membre éprouvé
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Par défaut
    Citation Envoyé par kurul1
    [C++ Erreur] FormPrincipale.cpp(1357): E2126 Case a contourné l'initialisation d'une variable locale
    Bonsoir,

    Aucune variable ne peut être initialisée dans le Switch.
    Tu déclares un objet TOnglet dans le premier Case.
    A mon avis, tu devrais essayer de déclarer ton TOnglet en amont du switch:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    TOnglet *Onglet = new TOnglet();
    par exemple, puis de donner une valeur a Onglet:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Onglet = (TOnglet *)(PageControl->Pages[FenetreActive]);
    par exemple, sous reserve de tester.

    En tout cas, je ne prétends pas être un bon théoricien, mais c'est ce que j'ai remarqué 'sur le tas'; et cette remarque a toujours été valable même pour un simple int ...

    En espérant t'aider,
    @ +

  5. #5
    Membre éclairé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    934
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 934
    Par défaut
    Merci pour vos infos.

    En fait, j'ai trouvé deux problèmes.

    Le premier est celui que vous m'avez exposé avec la création de ma variable Onglet avant le switch. Cela reste quand même bizard car dans une autre fonction, j'utilise également un switch, ou j'utilise un onglet et dans cette fonction avec la déclaration de la variable dans le case, cela ne me met pas d'erreur. J'ai corrigé aussi dans cette fonction pour ne pas avoir de problème.

    Le second est je pense aussi due au fait que j'avais uniquement pour mon onglet, un constructeur avec plusieurs paramètres. J'ai maintenant mis un constructeur avec uniquement TComponent *Owner comme paramètre et rajouter une fonction pour l'initialisation.

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

Discussions similaires

  1. Erreur sur un "Select case"
    Par pc75 dans le forum ASP
    Réponses: 1
    Dernier message: 18/09/2014, 16h36
  2. Erreurs sur procédure PL/SQL avec fonction case
    Par Djene dans le forum PL/SQL
    Réponses: 2
    Dernier message: 07/10/2011, 17h19
  3. erreur ORA 00905 : Mot clé absent sur un CASE WHEN
    Par gaijinma dans le forum PL/SQL
    Réponses: 2
    Dernier message: 01/07/2010, 14h32
  4. [VBS] Erreur sur "AddWindowsPrinterConnection"
    Par Admin dans le forum VBScript
    Réponses: 5
    Dernier message: 27/03/2004, 16h15
  5. Erreur sur le TNSListener après installation de 9iAS
    Par Patmane dans le forum Installation
    Réponses: 4
    Dernier message: 04/02/2004, 11h16

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