[Question langage c]

Résolu/Fermé
monnomestgilles Messages postés 3 Date d'inscription samedi 15 octobre 2005 Statut Membre Dernière intervention 19 octobre 2005 - 15 oct. 2005 à 18:06
monnomestgilles Messages postés 3 Date d'inscription samedi 15 octobre 2005 Statut Membre Dernière intervention 19 octobre 2005 - 19 oct. 2005 à 02:24
Bonjour, j'ai un problème avec un petit bout de code écrit en c qui ne compile pas. Lorsque je crée un pointeur de structure (ptr_t_data) de la même façon que le premier (ptr_t_choice), le second empêche la compilation et je ne comprend pas pourquoi.

SVP, si vous avez deux minutes, un peu d'aide, je voudrais vraiment savoir pourquoi ce code ne compile pas.

Merci pour votre temps

Voici le code en question:

code du main{}

#include"menu.h"

void main(void)
{

t_data * ptr_t_data;
ptr_t_data = (t_data *) malloc(sizeof(t_data));

t_choice * ptr_t_choice;
ptr_t_choice = (t_choice *) malloc(sizeof(t_choice));


free (ptr_t_choice);
free (ptr_t_data);
}


-----fichier menu.c-----

#include "menu.h"

-----fichier menu.h-----

#ifndef __menu__
#define __menu__

#include <stdlib.h>
#include <stdio.h>

#include "struct_choice.h"
#include "struct_data.h"

#endif

----fichier struct_choice.h-----

#ifndef __struct_choice__
#define __struct_choice__

#define MAX_FILENAME_LENGTH 10

typedef struct {

int manual_or_file;
int input_data_type;
int output_data_type;
int significant_number;
int output_file_type;
char separator_character;

char input_file_name[MAX_FILENAME_LENGTH];
char output_file_name[MAX_FILENAME_LENGTH];

} t_choice;

#endif


----fichier struct_data.h-----


#ifndef __struct_data__
#define __struct_data__

typedef struct {

long lat_degree;
long lat_minute;
long lat_second;

long long_degree;
long long_minute;
long long_second;

} t_data;

#endif

3 réponses

Ravachol Messages postés 560 Date d'inscription vendredi 5 mars 2004 Statut Membre Dernière intervention 30 octobre 2005 120
16 oct. 2005 à 09:27
Salut,
Je ne vais pas vraiment faire avancer le schmilblick mais chez moi ton code, tel quel, compile sans problème.
Si tu pouvais nous poster l'erreur que te renvois ton compilo, ça aiderait un peu plus.

====
Mon chez moi ;-)
OS: GNU/Linux Slackware 10.1
Environnement de dev: KDevelop 3.1.2
Compilateur: gcc 3.3.4
====

A++
0
monnomestgilles Messages postés 3 Date d'inscription samedi 15 octobre 2005 Statut Membre Dernière intervention 19 octobre 2005
16 oct. 2005 à 18:11
Bonjour,
voici l'erreur que me donne mon compilateur (Microsoft Visual C++ 6.0):

error C2275: 't_choice' : illegal use of this type as an expression
see declaration of 't_choice'
error C2065: 'ptr_t_choice' : undeclared identifier
'=' : 'int ' differs in levels of indirection from 'struct t_choice *'
'free' : pointer mismatch for actual parameter 1
2 error(s), 3 warning(s)

Je viens de contater que si je déclare le pointeur de structure concernant ptr_t_data en premier, la seconde déclaration cause l'erreur que je décris ici-haut. Par contre, si je déclare ptr_t_choice en premier, les mêmes erreur seront données par le compilateur, mais concernant ptr_t_data. Autrement dit, quelqu'elle soit, la deuxième décaration du pointeur de struct ne passe pas.

J'espère que ça va aider et merci beaucoup.
Je constate que le système linux semble encore une fois fonctionner un coche au-dessus!

A++
0
darkhorkeu Messages postés 73 Date d'inscription mardi 20 mai 2003 Statut Membre Dernière intervention 9 juin 2007 30
16 oct. 2005 à 18:38
Bonjour,

Je crois qu'en langage C, il faut faire les déclarations de variables avant la moindre ligne de code.
Il m'est déjà arrivé d'avoir ce problème, mais peut-être que ce n'est pas le cas ici.

Voila comment j'ecrirai le code :

void main(void)
{

t_data * ptr_t_data;
t_choice * ptr_t_choice;

ptr_t_data = (t_data *) malloc(sizeof(t_data));
ptr_t_choice = (t_choice *) malloc(sizeof(t_choice));


free (ptr_t_choice);
free (ptr_t_data);
} 


a+
0
monnomestgilles Messages postés 3 Date d'inscription samedi 15 octobre 2005 Statut Membre Dernière intervention 19 octobre 2005
19 oct. 2005 à 02:24
Salut,
c'est exactement ça le problème!
En C et avec le compilateur que j'ai, il faut mettre les déclarationa avant la moindre ligne de code.

Je croyais qu'il était possible de faire la déclaration d'une variable juste avant de l'utilisée, bien sûr.

Merci beaucoup, mon problème est réglé!
0