Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Quoi, zixte pas ? Variable non créée ?

10 réponses
Avatar
Gloops
Bonjour tout le monde,

Juste apr=E8s l'instruction
string strNom =3D strContenuPP.Substring(1, longnom - 1);

j'obtiens en ex=E9cution pas =E0 pas l'erreur
strNom : The name 'strNom' does not exist in the current context=09

alors que je v=E9rifie qu'il y a bien un texte dans
strContenuPP.Substring(1, longnom - 1)

Comment est-ce possible ?

10 réponses

Avatar
Patrice
Juste après l'instruction
string strNom = strContenuPP.Substring(1, longnom - 1);

j'obtiens en exécution pas à pas l'erreur
strNom : The name 'strNom' does not exist in the current context
alors que je vérifie qu'il y a bien un texte dans
strContenuPP.Substring(1, longnom - 1)



Bonjour,

Testé avec VS 2008 dans un static void Main en mode Debug, cela marche chez
moi...

"Optimize code" serait il activé dans la config de débogage ? Je crois me
souvenir que cela peut pertuber le pas à pas, l'optimization pouvant
modifier légèrement le code sous-jacent...

--
Patrice
Avatar
Gloops
Patrice a écrit, le 04/03/2010 13:24 :
"Optimize code" serait il activé dans la config de débogage ? Je cr ois me
souvenir que cela peut pertuber le pas à pas, l'optimization pouvant
modifier légèrement le code sous-jacent...



Salut,

J'ai cherché "Optimize" dans le code de toute la solution, rien trouvé .
ça dépendrait d'une option par défaut ? Apparemment il faut parcour ir un
certain nombre de rubriques dans MSDN avant de tomber dessus.

Enfin ça pourrait effectivement être une explication, ce qui fait que
j'ai dû déclarer la variable au niveau fonction plutôt qu'au niveau bloc.

Alors ce que tu dis me rassure, ce n'est peut-être pas moi qui ai tapé
une "conceté", comme dit un certain Sieur Bellamy ...
Avatar
Gloops
Gloops a écrit, le 04/03/2010 12:14 :
Bonjour tout le monde,

Juste après l'instruction
string strNom = strContenuPP.Substring(1, longnom - 1);

j'obtiens en exécution pas à pas l'erreur
strNom : The name 'strNom' does not exist in the current context

alors que je vérifie qu'il y a bien un texte dans
strContenuPP.Substring(1, longnom - 1)

Comment est-ce possible ?



Ah il y a un truc que je n'ai pas dit c'est que j'utilise VS 2005.
Avatar
The Best Poster
Gloops a exprimé avec précision :
Patrice a écrit, le 04/03/2010 13:24 :
"Optimize code" serait il activé dans la config de débogage ? Je crois me
souvenir que cela peut pertuber le pas à pas, l'optimization pouvant
modifier légèrement le code sous-jacent...



Salut,

J'ai cherché "Optimize" dans le code de toute la solution, rien trouvé.
ça dépendrait d'une option par défaut ? Apparemment il faut parcourir un
certain nombre de rubriques dans MSDN avant de tomber dessus.

Enfin ça pourrait effectivement être une explication, ce qui fait que j'ai dû
déclarer la variable au niveau fonction plutôt qu'au niveau bloc.

Alors ce que tu dis me rassure, ce n'est peut-être pas moi qui ai tapé une
"conceté", comme dit un certain Sieur Bellamy ...



Changer le nom de la variable. Toujours le même problème ?
Avatar
Gloops
The Best Poster a écrit, le 04/03/2010 18:06 :
Changer le nom de la variable. Toujours le même problème ?





Dans l'absolu on peut se dire que non puisque créer une variable dans u n
bloc de code, ce n'est quand même pas la première fois que je le fais .

En fait cette variable existait en plusieurs blocs de la fonction, j'ai
fait ça un peu exprès histoire d'être sûr que le contenu ne passe pas de
l'un à l'autre. Du coup déclarer la variable au niveau au-dessus rè gle
le problème ... de la variable "non créée". Je perds le bénéfic e de la
validité restreinte, bien entendu. Au bout du compte, l'essentiel reste
que le programme fonctionne.

Merci en tout cas pour la contribution ...
Avatar
Patrice
Dans l'absolu on peut se dire que non puisque créer une variable dans un
bloc de code, ce n'est quand même pas la première fois que je le fais.

En fait cette variable existait en plusieurs blocs de la fonction, j'ai
fait ça un peu exprès histoire d'être sûr que le contenu ne passe pas de
l'un à l'autre. Du coup déclarer la variable au niveau au-dessus règle le
problème ... de la variable "non créée". Je perds le bénéfice de la
validité restreinte, bien entendu. Au bout du compte, l'essentiel reste
que le programme fonctionne.



Le plus simple est de poster toujours le code minimal mais complet qui
montre le problème. L'information en plus que tu donnes là est que le code
montré à l'origine pourrait bien être donc dans son propre bloc de code...

Par exemple avec :

static void Main(string[] args)
{
int a = 10;
{
int b = 20;
b += 1;
}
a = a * 2;
}

Sur la ligne a = a * 2; la fenêtre Watch affichera effectivement ce message
pour b. C'est normal b est bien locale au bloc et non pas à la fonction...

--
Patrice
Avatar
Gloops
Patrice a écrit, le 05/03/2010 13:04 :
Dans l'absolu on peut se dire que non puisque créer une variable dan s un
bloc de code, ce n'est quand même pas la première fois que je le f ais.

En fait cette variable existait en plusieurs blocs de la fonction, j'a i
fait ça un peu exprès histoire d'être sûr que le contenu ne pa sse pas de
l'un à l'autre. Du coup déclarer la variable au niveau au-dessus r ègle le
problème ... de la variable "non créée". Je perds le bénéfic e de la
validité restreinte, bien entendu. Au bout du compte, l'essentiel re ste
que le programme fonctionne.



Le plus simple est de poster toujours le code minimal mais complet qui
montre le problème. L'information en plus que tu donnes là est que le code
montré à l'origine pourrait bien être donc dans son propre bloc d e code...

Par exemple avec :

static void Main(string[] args)
{
int a = 10;
{
int b = 20;
b += 1;
}
a = a * 2;
}

Sur la ligne a = a * 2; la fenêtre Watch affichera effectivement c e message
pour b. C'est normal b est bien locale au bloc et non pas à la foncti on...




Oui ça d'accord.

Le code était plutôt, en gros, du type


{
{
int a = 0;
affiche(a);
}
{
int a = 1; // protestation du compilateur
affiche(a);
}
}


et j'ai pu faire fonctionner ça comme ça :

{
int a;
{
a = 0;
affiche(a);
}
{
a = 1;
affiche(b);
}
}
Avatar
Patrice
Le code était plutôt, en gros, du type


{
{
int a = 0;
affiche(a);
}
{
int a = 1; // protestation du compilateur
affiche(a);
}
}





Sûr ? On peut définir deux variables de même nom à partir du moment où elles
sont dans des blocs différents.

Par contre définir une variable locale à la fonction et une variable de même
nom locale à un bloc fait que dans le bloc, il devient impossible de
distinguer les deux variables. C'est donc interdit par le compilateur et je
pense que c'était plutôt dans ce cas de figure que tu étais :
int a=0;
{
int a;
affiche(a); // Le compilateur proteste car impossible de savoir si il
s'agit de la variable "a" locale à la fonction ou de la variable "a" locale
au bloc.
}

--
Patrice
Avatar
Gloops
Patrice a écrit, le 05/03/2010 17:48 :
Le code était plutôt, en gros, du type


{
{
int a = 0;
affiche(a);
}
{
int a = 1; // protestation du compilateur
affiche(a);
}
}





Sûr ? On peut définir deux variables de même nom à partir du mo ment où elles
sont dans des blocs différents.

Par contre définir une variable locale à la fonction et une variabl e de même
nom locale à un bloc fait que dans le bloc, il devient impossible de
distinguer les deux variables. C'est donc interdit par le compilateur e t je
pense que c'était plutôt dans ce cas de figure que tu étais :
int a=0;
{
int a;
affiche(a); // Le compilateur proteste car impossible de savoir si il
s'agit de la variable "a" locale à la fonction ou de la variable "a" locale
au bloc.
}




ça, ça arrive, mais alors on n'en parle pas dans les newsgroups, parc e
qu'alors on obtient un message du type "cette variable ne peut pas être
créée car cela changerait le sens du nom ¤¤¤ déclaré à un autre niveau".
De mémoire, mais je pense que les gens qui ont lu ce message le
reconnaissent.
Avatar
Patrice
ça, ça arrive, mais alors on n'en parle pas dans les newsgroups, parce
qu'alors on obtient un message du type "cette variable ne peut pas être
créée car cela changerait le sens du nom ¤¤¤ déclaré à un autre niveau".
De mémoire, mais je pense que les gens qui ont lu ce message le
reconnaissent.



Au temps pour moi... C'est le "protestation du compilateur" qui m'a induit
en erreur. Effectivement en relisant le fil je vois que c'était un pb
d'exécution du code en pas à pas et non pas un pb de compilation...

--
Patrice