'n'a pas été déclaré dans cette étendue' erreur
Donc j'ai écrit ce programme simple pour calculer le jour d'une date à l'aide de l'algorithme de Gauss trouvé ici.
#include <iostream>
using namespace std;
//Using the Gaussian algorithm
int dayofweek(int date, int month, int year ){
int d=date;
if (month==1||month==2)
{int y=((year-1)%100);int c=(year-1)/100;}
else
{int y=year%100;int c=year/100;}
int m=(month+9)%12+1;
int product=(d+(2.6*m-0.2)+y+y/4+c/4-2*c);
return product%7;
}
int main(){
cout<<dayofweek(19,1,2054);
return 0;
}
C'est un programme très simple et ce qui est encore plus étonnant est la sortie.
:In function dayofweek(int, int, int)’:
:19: warning: unused variable ‘y’
:19: warning: unused variable ‘c’
:21: warning: unused variable ‘y’
:21: warning: unused variable ‘c’
:23: error: ‘y’ was not declared in this scope
:25: error: ‘c’ was not declared in this scope
Il dit que ma variable est inutilisée mais dit alors qu'il n'est pas déclaré? Quelqu'un pourrait-il me dire de quoi de mal.
source d'informationauteur cortex
Vous devez vous connecter pour publier un commentaire.
La portée d'une variable est toujours le bloc c'est à l'intérieur. Par exemple si vous faites quelque chose comme
La solution est de définir y en dehors de la si les blocs
Dans votre programme, vous devez déplacer la définition de y et c du si de blocs dans la plus haute portée. Votre Fonction serait alors ressembler à ceci:
Voici un exemple simplifié sur la base de votre problème:
Dans la version ci-dessus, vous avez une variable appelée
y
qui est limitée à une portée de 1, et d'autre variable appeléey
qui est limitée à la portée 2. Vous essayez alors de se référer à une variable nomméey
après la fin de laif
et non de la variabley
peut être vu parce qu'aucune variable existe dans ce champ d'application.Vous résoudre le problème en plaçant
y
dans le contexte le plus externe qui contient toutes les références:J'ai écrit l'exemple simplifié composé de code pour le rendre plus clair pour vous de comprendre le problème. Vous devriez maintenant être en mesure d'appliquer le principe de votre code.
Vous devez déclarer y et c en dehors de la portée de la if/else. Une variable est uniquement valable à l'intérieur de la portée, il est déclaré (et d'un champ est marqué par des { })
Ici
vous déclarez et initialisez les variables
y, c
mais vous n'avez pas utilisé à tous avant de courir hors de portée. C'est pourquoi vous obtenez leunused
message.Plus tard en la fonction,
y, c
sont non déclaré, parce que les déclarations que vous faites seulement le maintenir à l'intérieur du bloc elles ont été faites dans (le bloc entre accolades{...}
).