Problème entre compilateurs

Résolu
GrandGarfield Messages postés 9 Date d'inscription samedi 8 juillet 2006 Statut Membre Dernière intervention 21 février 2008 - 19 févr. 2008 à 18:02
GrandGarfield Messages postés 9 Date d'inscription samedi 8 juillet 2006 Statut Membre Dernière intervention 21 février 2008 - 21 févr. 2008 à 16:55
Bonjour,

j'ai développé une application C++ qui fait intervenir des lectures et écritures dans des fichiers textes.
J'ai en fait commencé le développement simplement dans notepad++ et je compilais en ligne de commande avec g++ -o.
Le programme grandissant, je l'ai passé pour des raisons pratiques dans Visual Studio 2008 Express. (Projet vide dans lequel j'ai simplement mis mes source et fait générer)
Aucun problème jusque là, tout marche.

Il faut maintenant que j'intègre mon code dans un autre codé sous VC++6 et utilisant les MFC.

Je décide donc déjà de passer mon code sous Visual Studio 2005 pro que j'ai sur une autre machine (même méthode projet vide et j'y mets mes sources).
La compilation fonctionne mais le résultat n'est plus du tout bon.
Voici un exemple où je constate les dégâts (code en fin de message) :

Il s'agit en fait de lire la facettes dans un fichiers VRML qui sont écrites sous la forme : a, b, c, -1, (a,b,c étant des int qui représentent les sommets de la facettes et -1 un caractère délimiteur pour indiquer que la facette s'arrête.)
La fin du bloc de facettes se termine par un ] à la place d'une virgule après le -1.
Le bout de code suivant lit à chaque fois un entier (a) , un char (,), un entier (b), un char (,), un entier (c), un char (,), un entier (-1), un char (, ou ] )

Il met ensuite les données recueillies dans des structures pour les traiter après. Il s'arrête à la rencontre du caractère ']'

En compilant le programme contenant ce bout de code en ligne de commande g++ -o ... tout fonctionne et j'ai les bonnes données dans mes structures. En particulier le message "facette non triangulaire rencontrée " ne s'affiche jamais

Mais le programme fourni par visual studio affiche systématiquement le message avec des valeurs i,j,k,l tout le temps identiques (3350360,0,1244372,3342336).

Je sollicite donc votre aide si quelqu'un sait pourquoi le compilateur de Visual Studio 2005 pro ne fait pas des programmes qui lisent les fichiers de la même facon que g++ ou celui de VS2008 express et si on peut arranger le code pour que ça fonctionne...

(Note : je n'ai pas retouché le code entre les changement d'EDI il s'agit exactement des même fichiers sources dans toutes les descriptions que j'ai faites par ailleurs je ne sais pas si ça compte mais j'ai essayé de n'utiliser aucune fonctions "C" donc pas de fopen, fread, de gets, de fscanf ou quoi que ce soit du genre)

Merci d'avance.

Extrait du code :

if(s.find("coordIndex") != string::npos && s[0]!='#'){
while(c!=']'){
fichier>>i>>c>>j>>c>>k>>c>>l>>c; if(l!=-1){
cout << "facette non triangulaire rencontrée" << " i,j,k,l : " << i << "," << j << "," << k << "," << l << endl ;
}
m.addFace(IndexFacette(i,j,k)); ligne++;
}
c='a';
}

4 réponses

gvollant Messages postés 22 Date d'inscription mardi 3 mars 2009 Statut Membre Dernière intervention 3 mars 2009 13
20 févr. 2008 à 11:28
Essayez à la fois dans le projet VS2008 (qui fonctionne) et VS2005 de faire une fonction qui va créer en sortie un fichier avec des valeurs numériques, en utilisant la même famille de fonction que ce que vous utilisez pour lire le fichier, et ensuite de comparer les 2 fichiers produits
3
gvollant Messages postés 22 Date d'inscription mardi 3 mars 2009 Statut Membre Dernière intervention 3 mars 2009 13
19 févr. 2008 à 20:56
Difficile d'avoir une idée définitive, mais une hypothèse : est ce qu'une version n'aurait pas été compilée en unicode?
0
GrandGarfield Messages postés 9 Date d'inscription samedi 8 juillet 2006 Statut Membre Dernière intervention 21 février 2008
20 févr. 2008 à 11:23
Bonjour,

merci pour cette idée mais ça ne semble pas être ça.

Le projet n'était pas en unicode, j'ai essayé en le mettant mais ça ne change rien...
0
GrandGarfield Messages postés 9 Date d'inscription samedi 8 juillet 2006 Statut Membre Dernière intervention 21 février 2008
21 févr. 2008 à 16:55
Merci, en suivant cette idée j'ai trouvé un moyen de contourner le problème.

En fait quelques lignes plus haut il y a sensiblement le même type de lecture mais avec des variables double et cela marchait très bien. ( J'ai fait en fait réecrire les valeurs lues dans un fichier )
Les variables i,j,k et l étaient des int dans le code au-dessus car c'est bien des int que je veux lire et que le programme lisait bien jusque là.
J'ai donc mis mes variables i,j,k et l en double pour la lecture et je les ai casté après en int.
C'est assez moche et ça n'explique pas la raison du problème mais ça marche en attendant de trouver mieux ...

Merci pour votre aide
0
Rejoignez-nous