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 :

portee d'une variable dans "visual studio"


Sujet :

C++

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 26
    Par défaut portee d'une variable dans "visual studio"
    Bonjour.
    Je débute avec "Visual Studio" et j'ai l'erreur suivante (parmi d'autres):
    Lors de la compilation d'un programme que je n'ai pas rédigé moi-même, Visual studio me génère l'erreur suivante:
    "Erreur 3 error C2065: 'i'*: identificateur non déclaré mon_fichier.cpp 54"
    - La variable "i" a été déclarée juste au dessus de la ligne concernée par l'erreur, mais à l'intérieur d'une boucle "for".

    Le code est le suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    	for (int i=0; i<10; i++) { ...des instruction;... }
    	....... des instructions; .......
    	for (i=0; i<3; i++)	  '<----- L erreur se trouve ici : ne reconnait pas ce i>'
    	{ .....des instructions;....	}
    Pouvez-vous me dire ce qu'il faut faire pour éviter de recevoir cette erreur ?
    L'astuce que j'ai trouvé actuellement pour résoudre ce problème est : clic-droit sur le projet en question, puis dans "projet\projet\propriétés\C/C++\Langage", je mets à False "Conformité forcée dans la portée d'une boucle for".
    Cette astuce ne m'arrange pas trop car je suis obligé de faire la même chose avec tous les projets concernés par cette erreur (plusieurs projets qui forment un seul projet).
    Avez-vous une autre solution à ce problème ?
    Merci d'avance.

  2. #2
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 247
    Par défaut
    Le premier i déclaré (for(int i...) n'est déclaré que pour la boucle For, c'est à dire que pour le code à l'intérieur de la paire d'accolades qui suient immédiatement le For.

    Dans le second For, la variable i est effectivement initialisée mais pas déclarée.
    Il faut que tu fasse comme dans le premier For, rajoute le int devant.

    Ou sinon, si tu veux que la variable i soit commune aux 2 for, ainsi qu'au reste du code, il faudra que tu mette la ligne de code "int i;" quelque part avant le premier for, et écrire à ce moment là, le premier for comme l'est actuellement le second.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 84
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    	for (int i=0; i<10; i++) {I EXISTE ET INITIALISÉE
            }//Accolade fermé donc i n'est plus dans le scope.
     
    	....... des instructions; .......//i ne pourra être utilisée ici... ni dans le 
           //second for...
    	for (i=0; i<3; i++)	  '<----- L erreur se trouve ici : ne reconnait pas ce i>'
    	{ .....des instructions;....	}
    Solution:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
            int i = 0;
    	for (i=0; i<10; i++) {
            }
    	for (i=0; i<3; i++)	  '<----- L erreur se trouve ici : ne reconnait pas ce i>'
    	{ .....des instructions;....	}

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    780
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2006
    Messages : 780
    Par défaut
    Pour moi la solution correcte ce serait:

    for (int i=0; i<10; i++)
    { ...des instruction;... }

    ....... des instructions; .......

    for (int i=0; i<3; i++)
    { .....des instructions;.... }
    En C++ on peut définir les variables où l'on veut.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 26
    Par défaut
    Le problème est que tout le projet est écrit de cette manière. Je ne vais pas aller changer tous les fichiers ! Je ne sais d'ailleurs si j'ai le droit de le faire. Je suis sensé juste ajouter quelques instructions pour résoudre un problème particulier.

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    318
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 318
    Par défaut
    Citation Envoyé par liloulinx Voir le message
    Le problème est que tout le projet est écrit de cette manière. Je ne vais pas aller changer tous les fichiers ! Je ne sais d'ailleurs si j'ai le droit de le faire. Je suis sensé juste ajouter quelques instructions pour résoudre un problème particulier.
    Tu utilises un autre compilateur/ version de VS que celle du développement d'origine, il me semble??
    Si j'ai bien compris, pourquoi n'utilise tu pas les IDE et compilateur d'origines? Justement il me semble que dans les vieilles versions de VS (v6 par exemple) ton code fonctionne.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 26
    Par défaut
    Oui, c'est possible que mon problème vienne de là. Merci pour l'info .
    Je dois alors installer sur ma machine une ancienne version de Visual studio. Il me reste alors à en trouver une...

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    318
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 318
    Par défaut
    Citation Envoyé par liloulinx Voir le message
    Oui, c'est possible que mon problème vienne de là. Merci pour l'info .
    Je dois alors installer sur ma machine une ancienne version de Visual studio. Il me reste alors à en trouver une...
    Tu as 2 solutions:
    -> soit tu trouve l'IDE/compilateur qui à été utilisé pour codé ton programme
    -> soit tu es obligé de recoder les parties qui posent problèmes avec un nouvel IDE/compilateur

    c'est pour ça qu'on est parfois obligé de garder/travailler sur des vieilles versions/techno: il faut bien pouvoir faire la maintenance des logiciels développés il y a plusieurs années et encore en services.

  9. #9
    Membre expérimenté Avatar de Nogane
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    241
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 241
    Par défaut
    Bonjour,
    Je viens de vérifier dans un Visual récent. Dans les propriété du projet, dans "C/C++"/"Langage" il y a une option "Conformité forcée dans la porté des boucles for". Je ne serais pas surpris que passer cette option a "Non" règle ton problème. (tout en gardant du code non conforme, donc)

  10. #10
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Par défaut
    Je confirme : c'est un problème classique et courant dans le portage de code VC++ 6.0 vers VS 2003+...

    L'idéal reste de modifier le code pour le rendre conforme, ou de rester sur VC6.
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 26
    Par défaut
    Citation Envoyé par Nogane Voir le message
    Bonjour,
    Je viens de vérifier dans un Visual récent. Dans les propriété du projet, dans "C/C++"/"Langage" il y a une option "Conformité forcée dans la porté des boucles for". Je ne serais pas surpris que passer cette option a "Non" règle ton problème. (tout en gardant du code non conforme, donc)
    Oui, c'est ce que j'ai dit dans le premier texte que j'ai posté.
    Je compte pas modifier tout le code car, après avoir corrigé le pb là de variable dans la boucle for en mettant à 'Non' "Conformité forcée dans la portée des boucles for", il m'a affiché d'autres erreurs. Je pense que , ce qui me reste pour l'instant est de trouver une ancienne version de V-Studio (ver 6).

  12. #12
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Sauf que si les projets sont déjà au format .vcproj, tu perdras sans doute beaucoup plus de temps à re-convertir les projets dans l'autre sens (vers le vieux format .dsp de Visual 6) qu'à changer l'option dans les projets existants...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  13. #13
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Honnêtement, changer le code pour qu'il soit conforme ne devrait pas être si long que ça, les cas où la différence entre les deux modes n'étant pas si courants que ça, et très souvent détectés par le compilateur (ou alors, c'est que les développeurs précédents aimaient vraiment la réutilisation de nom de variable). J'ai déjà fait cette opération pour une base de code assez grosse, et c'était plié en quelques heures. Et après, on repars d'une base plus saine.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  14. #14
    Membre éclairé
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Juin 2008
    Messages
    522
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Chercheur en informatique

    Informations forums :
    Inscription : Juin 2008
    Messages : 522
    Par défaut
    Ben tu mets int i en variable globale et puis tu supprimes que le int dans la première boucle.

    NB: Le int i qui n'est declaré que pour la boucle c'est plus logique (La c'est microsoft qui s'est mis à la norme)

  15. #15
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    En variable globale? Tu veux surement dire la déclarer au début du bloc parent, car mettre une variable pareille en global, c'est de l'hérésie pure...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  16. #16
    Membre émérite
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    780
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2006
    Messages : 780
    Par défaut
    surtout qu'il vaut mieux réduire la portée de la variable (le mettre dans le for) que plutôt l'augmenter...

  17. #17
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Par défaut
    Je pense qu'il voulait dire "globale dans la fonction", et non pas "globale dans le fichier source".
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  18. #18
    Membre éclairé
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Juin 2008
    Messages
    522
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Chercheur en informatique

    Informations forums :
    Inscription : Juin 2008
    Messages : 522
    Par défaut
    Pourquoi?
    Les variables globales sont-elles si dangereuses?
    D'après un livre j'ai déclaré un objet d'une classe que j'ai crée en variable globale

  19. #19
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Elles sont dangereuses pour les problèmes de réentrance et de multithreading (voire, sous certains systèmes, des problèmes de programmation interruptible).
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  20. #20
    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
    Citation Envoyé par raphchar Voir le message
    Pourquoi?
    Les variables globales sont-elles si dangereuses?
    Citation Envoyé par Médinoc Voir le message
    Elles sont dangereuses pour les problèmes de réentrance et de multithreading (voire, sous certains systèmes, des problèmes de programmation interruptible).
    + elles rendent souvent le code spaghetti et incompréhensible
    + elles peuvent être masquées localement
    + elles augmentent les dépendances entre les différents composants
    + (je suis sûr qu'on trouvera encore d'autres inconvénients)
    et ceci a rarement à voir avec le C++.

Discussions similaires

  1. insérer des valeurs dans une table sql via visual studio
    Par le sportif dans le forum VB.NET
    Réponses: 2
    Dernier message: 19/04/2014, 10h17
  2. Réponses: 6
    Dernier message: 08/07/2008, 11h02
  3. comment recuperer une variable dans flash
    Par krépuscul dans le forum Flash
    Réponses: 30
    Dernier message: 16/10/2003, 09h40
  4. Réponses: 13
    Dernier message: 14/06/2003, 22h15

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