Histoire de variable global et de passage par adresse a une fonction [Résolu]

Signaler
Messages postés
29
Date d'inscription
mercredi 27 octobre 2004
Statut
Membre
Dernière intervention
17 août 2007
-
Messages postés
196
Date d'inscription
mercredi 6 août 2003
Statut
Membre
Dernière intervention
1 mai 2009
-
Salut, j 'ai creer une fonction qui est censee passer a une structure un certain nomber de valeurs. Je donne a cette fonction, la structure en question, ainsi ques les differentes valeurs a passer. Mais lorsque la structure n'est pas declare a l'exterieur du main ( c'est a dire en variable globale ) le compilateur genere des erreurs. Et je ne dois absolumment pas dans mon programme utiliser de variables globales, comment faire ?

voici la structure

struct eleve
{
char nom[25];
char prenom[25];
int age;
char lycee[25];
char interet[30];
};


voici ma fonction

void ajouter_eleve (struct eleve *el, char nom[20], char prenom[20], int age, char lycee[20], char interet[20])
{
strcpy((*el).nom),nom);
strcpy((*el).prenom),prenom);
strcpy((*el).lycee),lycee);
strcpy((*el).interet),interet);
(*el).age=age;
}

et voici les erreurs

C:\Dev-Cpp\EXOS\SansNom3.cpp In function `void ajouter_eleve(eleve*, char*, char*, int, char*, char*)':

14 C:\Dev-Cpp\EXOS\SansNom3.cpp invalid use of undefined type `struct eleve'

12 C:\Dev-Cpp\EXOS\SansNom3.cpp forward declaration of `struct eleve'


14 C:\Dev-Cpp\EXOS\SansNom3.cpp expected `;' before ')' token

voila apres elles se repetent pour les autres arguments

Merci d'avance poru votre aide.

4 réponses

Messages postés
196
Date d'inscription
mercredi 6 août 2003
Statut
Membre
Dernière intervention
1 mai 2009
2
salut. Je me demande si ta fonction déclarée avant le main, peut reconnaitre le type de ta structure si cette dernière est déclarée à l'intérieur du main, donc après.

LaPatoshe
Messages postés
196
Date d'inscription
mercredi 6 août 2003
Statut
Membre
Dernière intervention
1 mai 2009
2
Salut, j'ai quelque peu modifié ton code et cela fonctionne. Le plus gros prob venait de (*el). je l'ai remplacé par el->, l'opérateur -> remplaçant le point lors des accès aux variables d'un pointeur. Cependant, je me suis heurté à un autre problème, le compilateur me forçait à initialisr les veriables de toto lorsque le le déclarait dès le début comme étant un pointeur. C'est pourquoi, je l'ai déclaré au départ comme variable de structure normale, et je l'ai passée par son adresse dans la fonction.

#include <windows.h> //pour l'utilisation de lstrcpy sous vc++
#include <stdio.h>// pour l'utilisation de printf


struct eleve
{
char nom[25];
char prenom[25];
int age;
char lycee[25];
char interet[30];
};



void ajouter_eleve (eleve *el, char nom[25], char prenom[25], int age, char lycee[25], char interet[30]);



int main()
{
//Exemple pour vérifier
struct eleve toto;
ajouter_eleve(&toto, "Toto", "Marcel", 20, "cabanis", "sport");
printf("%s", toto.lycee );
return 0;
}


void ajouter_eleve (eleve *el, char nom[25], char prenom[25], int age, char lycee[25], char interet[30])
{
lstrcpy(el->nom,nom);
lstrcpy((el->prenom),prenom);
lstrcpy((el->lycee),lycee);
lstrcpy((el->interet),interet);
el->age=age;
}

LaPatoshe
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
strcpy((*el).nom),nom);

Je crois que tu fermes ta parenthèse un peu tôt, comme pour les lignes qui suivent.

Pour (*e). et e->, c'est strictement équivalent

Peut être faut-il aussi déclarer la structure ainsi:


struct eleve_
{
char nom[25];
char prenom[25];
int age;
char lycee[25];
char interet[30];
} eleve;
Messages postés
29
Date d'inscription
mercredi 27 octobre 2004
Statut
Membre
Dernière intervention
17 août 2007

Salut merci de votre rerponse

au faite le programme marchait avec le (*el). tant que je declarais la structure hors du main, en global. le probleme c'est que je ne dois pas la declarer hors du main et je en vois pas comment faire ?