Réponse acceptée !
Oula, ça pique au yeux !
Effectivement tu as fait du C. Mais le C++ est un langage différent.
J'ai du mal à comprendre pourquoi tu ne le fais pas en C ? Quelle intérêt as-tu à le faire en C++ ?
Pour que ce soit du C++ propre, il faudrait quasiment tout refaire.
Il y a aussi des trucs super horribles:
- Les gotos (les cas où un goto est utile est très très rare ! Quand on place un goto dans son code, il y a 99% de chance qu'il ne soit pas justifié).
- Mono-fonction: on découpe son code en petite fonction. Une fonction ne devrait pas excéder 25 lignes en moyenne (hors commentaire).
- FILE* => Tu devrais utiliser std::ofstream et std::ifstream
- char* => std::string et std::stringstream
- include windows/conio/time => inutile pour ce code, et tu casses la portabilité (je suis Linux, et ça se voit tout de suite). En retirant des includes inutile j'ai pu compiler.
- gets => fonction non standard, à éviter. Préférer std::cin de toute façon en C++.
- Bannir totalement les "using namespace std;", comme déjà expliqué.
- system: A bannir aussi, brise la portabilité.
Pour répondre techniquement à ta question:
Cette erreur est provoqué par les gotos. Chaque variable à une portée (un scope). Or tu définis un std::ifstream dans un scope sous l'égide d'une étiquette. Le compilateur ne considère pas que cette variable est isolée, donc sa destruction est effective au sortir de la fonction main. Et comme tu peux potentiellement revenir sur celle-ci alors qu'elle n'a théoriquement pas été détruite, le compilateur s'en rend compte et te dit que tu redéclares encore cette variable.
Pour éviter ceci, tu simules un scope à l'aide d'accolades.
Ex:
label:
std::ifstream pouet;
...
goto label;
...
label2:
Correction en:
label:
{
std::ifstream pouet;
...
goto label;
...
}
label2:
{
}
Bien évidemment, je te conseil de choisir un langage (C ou C++) et de l'utiliser correctement (on ne fais pas du C++ comme du C).
_____________________________________________
Historique de mes créations, et quelques articles:
http://0217021.free.fr/portfolio