Problème de structures - C - Programmation
Marsh Posté le 26-12-2005 à 23:49:56
LorDjidane a écrit : Souci, à la compilation, gcc me dit : "error : two or more data types in declaration of 'fiche_vide'". |
gcc version 3.95 ici, options -W -Wall -O2 -ansi activées, pas de warning.
Le problème se situe peut-être ailleurs que dans le seul code que tu as montré.
LorDjidane a écrit : Et j'ai droit à un warning que je saisis pas trop : |
Là encore je n'ai pas de warning.
LorDjidane a écrit : Ensuite je fais un fseek dans lequel j'ai besoin de la taille de ma structure, je fais un sizeof(fiche), mais il me sort l'erreur : "'fiche' has incomplete type" |
Là encore, je ne comprends pas l'origine de l'erreur.
Hypothèse : au moment de la compilation il ne connait pas la définition de la structure parce qu'elle est définie ailleurs, par exemple dans un fichier en-tête non inclu ?
Bref, peux-tu montrer davantage de code, et nous donner tes options de compilation ?
Marsh Posté le 27-12-2005 à 00:02:29
Bon, je n'ai plus l'erreur première.
Par contre pour le reste, bah je peux paster tout mon code (mais il est moche :x). J'utilise le gcc config de base avec devcpp 4.9.9.2. (je sais pas trop à quelle options ça correspond, je dév jamais sous win normalement)
Donc makefile de base
Code :
|
Et le code (je vire ce qui paraît inutile) :
Code :
|
Marsh Posté le 27-12-2005 à 00:18:49
Déplace la définition de struct element entre ton #include et ta fonction, tu vas voir ça va aller mieux.
Au passage, l'usage de fscanf tel que tu en fais-là est vraiment peu judicieux.
Utilise plutôt fread() pour la lecture et fwrite() pour l'écriture, vu que ta structure est de taille fixe ça passe tout seul.
Et n'oublie pas de contrôler le retour des fonctions que tu appelles, pour vérifier que tout se passe bien, plutôt que d'espérer que c'est le cas.
Parce que si quelque chose cloche, ça plante.
Marsh Posté le 27-12-2005 à 00:22:15
LorDjidane a écrit : Voilà, je n'ai pas vraiment trouvé d'aide, donc si quelqu'un pouvait m'aiguiller sur ces différents points, ce serait sympathique, merci. |
Tu ne montres que des bribes de code. Je peux affirmer que ceci est correct :
Code :
|
Mais je ne sais pas comment est organisé ton code (compilation séparée, fichiers d'entêtes etc.)
D'après les messages d'erreur, la définition de structure n'est pas visible.
Marsh Posté le 27-12-2005 à 00:26:06
Elmoricq a écrit : Au passage, l'usage de fscanf tel que tu en fais-là est vraiment peu judicieux. |
Tu suggères donc un fgets() + sscanf() ?
Citation : Utilise plutôt fread() pour la lecture et fwrite() pour l'écriture, vu que ta structure est de taille fixe ça passe tout seul. |
Je ne vois pas pourquoi. Si les données sont encodées en texte, il n'y a pas le choix. On a pas la spec, on ne peut rien dire.
Marsh Posté le 27-12-2005 à 00:28:11
Merci, c'était nul en fait (comme d'habitude).
On m'a tellement bassiné avec le "n'utilise pas de variables globales" que je me refusais à mettre ma structure à cet endroit. Je vais repotasser un peu mon cours.
Merci beaucoup à vous.
Marsh Posté le 27-12-2005 à 00:42:03
LorDjidane a écrit : Et le code (je vire ce qui paraît inutile) : |
OK. Disons que 'lecture' s'écrit 'consulter'.
Il des incohérences dans ce code. Si les données sont enregistrées au format texte,
- d'une part, il y a peu de chance que la taille de l'enregistrement soit fixe,
- d'autre part, cette taille n'est certainement pas sizeof(fiche).
Si tu veux utiliser fseek(), Elmoric a raison, il faut enregistrer/lire au format binaire avec fwrite() / fread().
Si le format des enregistrements est de type texte, (1 par ligne) avec les champs séparés par des virgules, par exemple, une lecture avec fgets() suivit d'une analyse avec sscanf() est possible (ne pas se tromper dans les types des données : *scanf() attend des adresses !). Il faut alors lire séquenciellement en comptant les enregistrements.
Marsh Posté le 27-12-2005 à 00:44:26
LorDjidane a écrit : Merci, c'était nul en fait (comme d'habitude). |
Raah! Non. Il faut travailler la 'positive attitude', sinon, c'est la dépression assurée...
Citation : |
Effectivement, la variable n'a pas à être globale. Mais la définition de structure, doit être visible de tous ceux qui en ont besoin.
http://forum.hardware.fr/hardwaref [...] m#t1273512
Marsh Posté le 26-12-2005 à 23:32:48
Salut !
Bon alors je suis face à une erreur que je ne comprends pas, malgré les faq que j'arpente sur le web.
J'ai une structure :
Puis j'en crée deux variables, dont une que j'initialise.
Souci, à la compilation, gcc me dit : "error : two or more data types in declaration of 'fiche_vide'".
Je vois pas le rapport, je fais pourtant comme il est indiqué dans ce cours (où y'a bien deux types différents) :
http://www.linux-kheops.com/doc/an [...] 0000000000
Mais soit.
Sinon, j'essaye de faire une fonction pour laquelle j'ai besoin d'entrer en paramètre une variable de type struct element. Donc je fais
Et j'ai droit à un warning que je saisis pas trop :
"struct element" declared inside parameter list
its scope is only this definition or declaration, which is probably not what you want
Ensuite je fais un fseek dans lequel j'ai besoin de la taille de ma structure, je fais un sizeof(fiche), mais il me sort l'erreur : "'fiche' has incomplete type"
Voilà, je n'ai pas vraiment trouvé d'aide, donc si quelqu'un pouvait m'aiguiller sur ces différents points, ce serait sympathique, merci.