[Question langage c]
Résolu
monnomestgilles
Messages postés
3
Date d'inscription
Statut
Membre
Dernière intervention
-
monnomestgilles Messages postés 3 Date d'inscription Statut Membre Dernière intervention -
monnomestgilles Messages postés 3 Date d'inscription Statut Membre Dernière intervention -
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
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
A voir également:
- [Question langage c]
- Langage ascii - Guide
- Langage binaire - Guide
- Pascal langage - Télécharger - Édition & Programmation
- Langage visual basic - Télécharger - Langages
- Langage basic gratuit - Télécharger - Édition & Programmation
3 réponses
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++
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++
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++
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++
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 :
a+
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+