[Question langage c] [Résolu/Fermé]

Messages postés
3
Date d'inscription
samedi 15 octobre 2005
Statut
Membre
Dernière intervention
19 octobre 2005
- - Dernière réponse : 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
Afficher la suite 

3 réponses

Messages postés
564
Date d'inscription
vendredi 5 mars 2004
Statut
Membre
Dernière intervention
30 octobre 2005
110
0
Merci
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++
Messages postés
3
Date d'inscription
samedi 15 octobre 2005
Statut
Membre
Dernière intervention
19 octobre 2005
0
Merci
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++
Messages postés
73
Date d'inscription
mardi 20 mai 2003
Statut
Membre
Dernière intervention
9 juin 2007
30
0
Merci
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+
monnomestgilles
Messages postés
3
Date d'inscription
samedi 15 octobre 2005
Statut
Membre
Dernière intervention
19 octobre 2005
-
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é!