Histoire de variable global et de passage par adresse a une fonction

Résolu
Anysse Messages postés 29 Date d'inscription mercredi 27 octobre 2004 Statut Membre Dernière intervention 17 août 2007 - 7 déc. 2005 à 23:20
Lord_Patoche Messages postés 196 Date d'inscription mercredi 6 août 2003 Statut Membre Dernière intervention 1 mai 2009 - 8 déc. 2005 à 21:36
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

Lord_Patoche Messages postés 196 Date d'inscription mercredi 6 août 2003 Statut Membre Dernière intervention 1 mai 2009 3
8 déc. 2005 à 21:36
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
3
Lord_Patoche Messages postés 196 Date d'inscription mercredi 6 août 2003 Statut Membre Dernière intervention 1 mai 2009 3
8 déc. 2005 à 00:43
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
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
8 déc. 2005 à 01:27
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;
0
Anysse Messages postés 29 Date d'inscription mercredi 27 octobre 2004 Statut Membre Dernière intervention 17 août 2007
8 déc. 2005 à 08:58
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 ?
0
Rejoignez-nous