J'ai un problème avec ma source j'utilise la fonction ifstream dans mon programme... Tout fonctionne à merveille par contre au moment de la compilation une erreur m'apparaît "crosses initialization of 'std::ifstream"...
Voilà je ne comprend pas pourquoi ses deux ifstream entre en conflit pourtant il me semble bien définit du moins à mon avis mais le compilateur n'est pas d'accord...
dernier détail si je fais compiler ma source avec seulement une des deux fonctions ifstream sa marche nickel !
Quelqu'un peut-il m'éclairer
Merci d'avance
A voir également:
Crosses initialization of
Crosses initialization of c++ - Meilleures réponses
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.
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
http://0217021.free.fr/portfolio]
PS: Évite les "using namespace", voir: http://0217021.free.fr/portfolio/axel.berardino/articles/bon-usage-using-namespace
_____________________________________________
Historique de mes créations, et quelques articles:[ http://0217021.free.fr/portfolio
http://0217021.free.fr/portfolio]
Tu gardes les:
* String_DATA
* String_login
sous forme de char* et tu vires juste les c_str().
Ex:
char* String_DATA = ...;
Account_GetID.open(String_DATA, std::ios::in);
_____________________________________________
Historique de mes créations, et quelques articles:[ http://0217021.free.fr/portfolio
http://0217021.free.fr/portfolio]
_____________________________________________
Historique de mes créations, et quelques articles:[ http://0217021.free.fr/portfolio
http://0217021.free.fr/portfolio]
j'ai essayé tes multiples idées mais j'arrive toujours au même problème de "crosses initialization" je me dis que le problème viens peut-être d'ailleurs dans le code alors je t'affiche toute la source:
printf("Menu\n");
printf("==================================================\n");
printf("Mot de passe Utilisateur.......................(1)\n");
printf("Mot de passe Fichier DATA......................(2)\n");
printf("Quitter........................................(3)\n\n");
ConvertString_PwdID1[hashd5] = ConvertString_PwdID1[hashd5] - 16;
}
printf("Le mot de passe de "%s" est: "%s"\n\n", LOGIN, ConvertString_PwdID1);
system("pause");
system("cls");
}
ConvertString_PwdID[hashd5] = ConvertString_PwdID[hashd5] - 16;
}
printf("Le mot de passe du fichier "%s" est: "%s"\n\n",DATAName, ConvertString_PwdID);
system("pause");
system("cls");
}
goto RESET_MenuOption;
Je suis bien d'accord que ma source est bordélique et mal conçu mais je dois te dire que j'ai appris sur le tas comme on dis j'ai découvert cette passion très jeune mais sans jamais avoir de réelle formation. Ce sont par contre des gens comme toi qui me font avancé et me donne le goût de m'investir sérieusement dans la programmation... Mais par ou commencer je ne le sais pas...
Bref, merci pour la solution sa fonction maintenant !