VC++ et erreurs de compilations :( [Résolu]

Signaler
Messages postés
59
Date d'inscription
mercredi 26 mai 2004
Statut
Membre
Dernière intervention
19 août 2004
-
Messages postés
2
Date d'inscription
mercredi 26 mars 2008
Statut
Membre
Dernière intervention
26 mars 2008
-
Bonjour tout le monde !

Voilà, je ne comprends pas, j'ai un programme qui ne veut pas se compiler et je désespère vraiment ...

#include // iostream.h est déprécié
#include <string>
#include <fstream>
#include <cstdlib>

int main()
{
ifstream file("fichier.txt");
if( !file.is_open() )
{
std::cerr << "Erreur d'ouverture du fichier" << std::endl;
return EXIT_FAILURE;
}
std::string line;
std::vector<std::string> file_content;
while( std::getline( file, line ) )
{
file_content.push_back( line );
}
// désormais file_content[i] contient la i-ème ligne du fichier (attention c'est un tableau, ca commence à la ligne 0)

return EXIT_SUCCESS;
}

Y'a t-il un oubli, quelquechose ?

Sinon, connaissez-vous un bout de code qui me permettrait d'ouvrir un fichier et de l'implémanter dans une variable tableau (pour exploitation de cette variable ensuite) ?

Merci beaucoup.

20 réponses

Messages postés
48
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
26 juillet 2005
3
Hello,

Voici une version de ton code modifiée pour comiler sous VC++ 6 :

#include // iostream.h est déprécié
#include <string>
#include <fstream>
#include <cstdlib>
#include <vector> // Pour pouvoir utiliser les vectors

using namespace std; // Pour ne pas avoir a préciser std:: toutes les 5 minutes

int main()
{
ifstream file("fichier.txt"); // Manquait un std::
if( !file.is_open() )
{
cerr << "Erreur d'ouverture du fichier" << std::endl;
return EXIT_FAILURE;
}
string line;
vector<string> file_content;
while(getline( file, line ) )
{
file_content.push_back( line );
}
// désormais file_content[i] contient la i-ème ligne du fichier (attention c'est un tableau, ca commence à la ligne 0)

return EXIT_SUCCESS;
}

T'inquiètes pas pour les warnings, c'est normal :)
Messages postés
59
Date d'inscription
mercredi 26 mai 2004
Statut
Membre
Dernière intervention
19 août 2004

Ah juste un oubli, voici les fantastiques erreurs :( :

Deleting intermediate files and output files for project 'Test - Win32 Debug'.
--------------------Configuration: Test - Win32 Debug--------------------
Compiling...
test.cpp
e:\test\test\test.cpp(8) : error C2065: 'ifstream' : undeclared identifier
e:\test\test\test.cpp(8) : error C2146: syntax error : missing ';' before identifier 'file'
e:\test\test\test.cpp(8) : error C2065: 'file' : undeclared identifier
e:\test\test\test.cpp(9) : error C2228: left of '.is_open' must have class/struct/union type
e:\test\test\test.cpp(15) : error C2039: 'vector' : is not a member of 'std'
e:\test\test\test.cpp(15) : error C2065: 'vector' : undeclared identifier
e:\test\test\test.cpp(15) : error C2275: 'std::string' : illegal use of this type as an expression
e:\test\test\test.cpp(15) : error C2065: 'file_content' : undeclared identifier
e:\test\test\test.cpp(16) : fatal error C1903: unable to recover from previous error(s); stopping compilation
Error executing cl.exe.

Test.exe - 9 error(s), 0 warning(s)
Messages postés
1878
Date d'inscription
jeudi 16 octobre 2003
Statut
Membre
Dernière intervention
16 mars 2011
1
pour ta question ui,
BFichierIni::getListe(...)

cf mes srces

sinon, pr les erreurs, sache qu'apparemment VC6 est guere compatible avec les stl....

dc
ifstream, etc ne sont aparemment po définis ds tes includes

++

Magic Nono: l'informagicien! 8-)
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
manque <vector>

et std::ifstream, ifstream ca existe pas

et met

std::cerr << "Erreur d'ouverture du fichier\n"; pas de std::endl sur std::cerr, ca sert a rien
Messages postés
59
Date d'inscription
mercredi 26 mai 2004
Statut
Membre
Dernière intervention
19 août 2004

Merci à tous, j'ai adopter la solution avec les warnings :) !

Juste un autre petit truc .. Moi le C++ je débarque un peu (même si j'en ai fait) et un truc bête que je voudrais savoir, c'est comment concaténer toutes les valeurs que je vais récupérer dans mon file_content[i] dans une variable unique ?! Je sais qu'on peut utiliser += ou append et avec la fonction size on renvoie le nombre de caractères contenus dans la string mais je n'ai pas tout capter .. Vous n'avez pas un exemple ?

Merci beaucoup !
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
#include
#include <string>
#include <fstream>
#include <cstdlib>

int main()
{

ifstream file("fichier.txt");

if( !file.is_open() )
{
std::cerr << "Erreur d'ouverture du fichier\n";
return EXIT_FAILURE;
}
std::string line;
std::vector<std::string> file_content;
while( std::getline( file, line ) ) file_content.push_back( line );

// pour concatener les string de file_content
std::string all_lines;
for( std::vector< std::string >::size_type i; i < file_content.size(); i++ )
all_lines += file_content[i];

}
Messages postés
59
Date d'inscription
mercredi 26 mai 2004
Statut
Membre
Dernière intervention
19 août 2004

Wow .. Non seulement t'es très fort mais en plus hyper rapide à répondre .. Jte remercie .. Mon passage de VB au C++ me fait vraiment bizarre :)

Bon allez je file tester ! :)
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
ca te ferais encore plus bizarre de passer au C, parce que faire ca en C c'est autre chose :D
Messages postés
59
Date d'inscription
mercredi 26 mai 2004
Statut
Membre
Dernière intervention
19 août 2004

lol .. le C .. :)

Hum sinon un truc que j'ai pas capté, tu déclares pas le i pour la boucle for ?! Paske moi quand je veux le déclaré il me dit de regarder sa déclaration :p ...

Le soucis c'est que le i vaut quelques milliards donc il ne passe pas par la boucle .. bêtement j'ai fait avec a et même problème ..
Messages postés
59
Date d'inscription
mercredi 26 mai 2004
Statut
Membre
Dernière intervention
19 août 2004

Non bah en fait je viens de comprendre .. size_type i = 0 .. ça fonctionne nickel :) ! Si y'avait pas Internet alala .. :)
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
le type size_type de std::vector est en generale un typedef de unsigned, mais l'utilisé peu autoriser le compilateur à faire qq optimisations

d'une maniere generale, pour les boucle, compteur, indexé un tabeau, et autres calcul (division, modulo) c'est plus rapide avec des unsigned
Messages postés
59
Date d'inscription
mercredi 26 mai 2004
Statut
Membre
Dernière intervention
19 août 2004

okaay c'est noté :) !

Jviens de voir tes sources .. impressionnant :) !

Sinon, tu saurais pas comment convertir cette ligne VB en quelque chose de simple en C++ :

codeasc = Asc(Mid(mscrypt, i, 1)) - Asc(Mid(key, j, 1))

codeAsc c'est un entier
msgcrypt c'est qqch du genre : azazlpds$^*ùdszdz
key c'est un truc style : 1234567

Allez, ciao, jcontinuerais ça demain moi :)
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
en fait faudrai plutot me dire ce que tu voudrais faire en c++ parce que ca c'est du chinois pour moi :(
Messages postés
59
Date d'inscription
mercredi 26 mai 2004
Statut
Membre
Dernière intervention
19 août 2004

Je t'explique !

En fait j'ai une variable msgcrypt (contenu dans un fichier à la base).

cette variable, avant le passage dans ce bout de code, est du style :

msgcrypt = "u??|?~{?u??y^``?v??}z??ne`bb|zv~_aav?x??uma_aav}|??mb"

2 Fonctions sont présente : Asc pour convertir un caractère par sa valeur Ascii. Mid pour sélectionner un seul caractère de la chaine de caractère .. Cette ligne de code est dans une boucle donc je passe tout les caractères en revu, un par un ..

Ce que je cherche c'est donc un moyen en C++ de sélectionner un seul caractère dans une chaine de caractère. Un ptit peu plus clair jpense ;)
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
en c tu peux passer par un simple cast pour obtenir le code ascii (pas necessaire en c)

et pour selectionner un caracter dans une chaine, que ce soit pour un char[] ou std::string

char c[] = "hello";

tu as c[1] == 'e'
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
je voulais dire en c++ au debut
Messages postés
59
Date d'inscription
mercredi 26 mai 2004
Statut
Membre
Dernière intervention
19 août 2004

CString::Mid -> visiblement, il y a des liens entre VC++ et VB :) ! Bon jcrois que jvais yarivé :) ! Allez, @ Demain tlm :)
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
oui voila, avec les CString des MFC si tu veux
Messages postés
1
Date d'inscription
mardi 9 mars 2004
Statut
Membre
Dernière intervention
30 mars 2005

--
La différence entre la pratique et la théorie est plus grande en pratique qu'en théorie.
Messages postés
2
Date d'inscription
mercredi 26 mars 2008
Statut
Membre
Dernière intervention
26 mars 2008

jé besoin d'un exemple d'application en visuel c++ a base des MFC pour la gestion des erreurs c'est vraiment urgent