dPm Posté(e) le 8 avril 2005 Signaler Posté(e) le 8 avril 2005 voilà, j'ai fait un petit truc, toujours pour mon satané TD d'info... Le prof, complètement relou veut qu'on fasse le même truc que lui. Mais il nous donne un début de correction.. sauf qu'il n'explique pas du tout comment son truc marche... Là j'ai tout ce qu'il nous a passé, plus ce que j'avais déjà fait. sauf que... --------------------Configuration: TDprogC - Win32 Debug--------------------Compiling... TDProg.c Linking... TDProg.obj : error LNK2001: unresolved external symbol _AjouterElement TDProg.obj : error LNK2001: unresolved external symbol _EditerListe TDProg.obj : error LNK2001: unresolved external symbol _SupprimerListe Debug/TDprogC.exe : fatal error LNK1120: 3 unresolved externals Error executing link.exe. TDprogC.exe - 4 error(s), 0 warning(s) lien vers le listing et les headers (à noter que les headers sont à faire soit même aussi... lien vers le workspace en entier voilà si quelqu'un comprend et peut m'aider, je lui en serait gré Citer
matriximpulse Posté(e) le 8 avril 2005 Signaler Posté(e) le 8 avril 2005 Tu pourrais poster les sources stp ? (j'peux pas ouvrir les .rar au boulot :s et je peux rien installer :S) Citer
dPm Posté(e) le 8 avril 2005 Auteur Signaler Posté(e) le 8 avril 2005 bon... ok ^^ le programme principale [cpp]#pragma hdrstop /* Déclarations */ #include #include #include #include "TDAppl.h" /* Fonction Main */ main () { //déclaration des variables int choix; char quitter; int menu(); Liste * pli = NULL; do { choix = menu(); //renvoie à la fonction menu /* action en fonction du retour de la fonction menu */ switch (choix) { case 0: printf("\n\nVoulez-vous vraiment quitter?\n Confirmez par (O)ui ou (N)on: "); fflush(stdin); scanf("%c", &quitter); break; case 1: pli = ChoixCreerListe(pli); break; case 2: ChoixAjouterMembre (pli); break; case 3: printf("\nva renvoyer vers la fonction suppression\n"); break; case 4: printf("\nva renvoyer vers la fonction recherche\n"); break; case 5: printf("\nva renvoyer vers la fonction edition\n"); break; case 6: printf("\nva renvoyer vers la fonction noitide\n"); break; case 7: printf("\nva renvoyer vers la fonction sauvegarder\n"); break; case 8: printf("\nva renvoyer vers la fonction charger\n"); break; } } while(quitter != 'O' && quitter != 'o'); /* fin du programme */ system("cls"); printf("fin du programme.\n"); return 0; }[/cpp] les headers [cpp]/* TDAppl.h */ #ifndef __TDAPPL_H #define __TDAPPL_H #endif #define TXTCOURT 30 #define TXTLONG 50 #define CARNUL '\0' #include "TDListe.h" #include int menu(); Liste * ChoixCreerListe(Liste *); Liste * ChoixSupprimerListe(Liste *); void ChoixAjouterMembre(Liste *); void ChoixEditerListe(Liste *); /* Fonction menu */ int menu () { int choix = -1; /* affichage du menu et saisi du choix */ system("cls"); printf("==Bienvenue==\n"); printf("\n============="); printf("\nApplication Gestion d'une liste"); printf("\nGroupe xxxx\n "); printf("\nMenu Principal\n0 - Quitter"); printf("\n1 - Créer une nouvelle liste"); printf("\n2 - Ajouter un nouveau membre"); printf("\n3 - Supprimer un membre"); printf("\n4 - Chercher un membre"); printf("\n5 - Editer la liste"); printf("\n6 - Editer la liste (ordre inverse)"); printf("\n7 - Sauvegarder la liste"); printf("\n8 - Charger une liste existante\n "); printf("\n3 - Supprimer la liste"); printf("\n \t\tVotre choix: "); fflush(stdin); scanf("%d",&choix); /* vérification si le choix entre dans les propositions */ if(choix < 0 || choix > 9) { do { system("cls"); printf("==Bienvenue==\n"); printf("\n============="); printf("\nApplication Gestion d'une liste"); printf("\nGroupe xxxx\n "); printf("\nMenu Principal\n0 - Quitter"); printf("\n1 - Créer une nouvelle liste"); printf("\n2 - Ajouter un nouveau membre"); printf("\n3 - Supprimer un membre"); printf("\n4 - Chercher un membre"); printf("\n5 - Editer la liste"); printf("\n6 - Editer la liste (ordre inverse)"); printf("\n7 - Sauvegarder la liste"); printf("\n8 - Charger une liste existante\n "); printf("\n3 - Supprimer la liste"); printf("\n\tErreur: Saisi incorrecte\n"); printf("\n \t\tVotre choix: "); fflush(stdin); scanf("%d",&choix); } while (choix < 0 || choix > 9); } /* Fin fonction menu */ return choix; } /*Choix Valeur 1 */ Liste * ChoixCreerListe(Liste * MaListe) { Liste * ListeTemp = NULL; char reponse = 'N'; if (MaListe == NULL) { ListeTemp = CreerListe(); if (ListeTemp != NULL) printf("\nNouvelle liste creee..."); else { printf("\nerreur allocation memoire"); printf("\nLa nouvelle liste n'a pas pu etre creee"); } return ListeTemp; } else { printf("\nIl exste deja une liste"); printf("\n\nVoulez vous re-initialiser la liste? (O)ui / (N)on"); fflush(stdin); scanf("%c", &reponse); if (reponse == 'O' || reponse == 'o') { RAZListe(MaListe); printf("\nListe re-initialisee"); } else printf("\nListe non re-intitialisee"); return MaListe; } } /*Choix valeur 2 */ void ChoixAjouterMembre(Liste * MaListe) { switch(ListeExiste(MaListe)) { case -1: printf("\nPas de Liste. Creez d'abord une liste..\n"); return; default: AjouterElement(CreerElement(), MaListe); } return; } /* Choix Valeur 3*/ /*Choix Valeur 4*/ /* Choix Valeur 5*/ void ChoixEditerListe(Liste*MaListe) { switch(ListeExiste(MaListe)) { case -1: printf("\nPas de Liste. Creez d'abord une liste.."); return; case 0: printf("\nLa Liste est vide."); return; default: EditerListe(MaListe); } return; } /*Choix Valeur 6*/ /*Choix Valeur 7*/ /*Choix Valeur 8*/ /*Choix Valeur 9 */ Liste * ChoixSupprimerListe(Liste * MaListe) { char reponse='N'; if(MaListe==NULL) return NULL; printf("\n\nVoulez vous supprimer la liste ? (O)ui / (N)on "); fflush(stdin); scanf("%c",&reponse); if(reponse=='O'||reponse=='o') { SupprimerListe(MaListe); printf("\nListe supprimee"); } else printf("\nliste non supprimee"); return NULL; } [/cpp] [cpp]// TDListe.h #ifndef __TDLISTE_H #define __TDLISTE_H #endif #include #include // Declaration des types typedef struct s_element { char Nom[TXTCOURT+ 1]; char Prenom[TXTCOURT+ 1]; char Numero[4]; struct s_element * Suivant; } Element; typedef struct s_Liste { Element * premier; Element * courant; Element * dernier; int nbrElem; int blnTri; } Liste; // Declaration des prototypes Liste * CreerListe(void); //Creation nouvelle Liste + initialisation champs void RAZListe(Liste * ); int ListeExiste(Liste *); // -1 si liste NULL sinon nombre d'eleves de la liste Element * CreerElement(void); // Creation nouvel eleve + initialisation champs void AjouterElement(Element *, Liste*); void AjouterElement(Element *,Liste *); Liste * SupprimerListe(Liste *); void EditerListe(Liste *); // Definition des fonctions Liste * CreerListe(void) { //Creation d'une nouvelle liste et initialisation des champs size_t size; Liste * MaListe=NULL; size=(size_t)sizeof(Liste); MaListe=(Liste *)malloc(size); MaListe->premier=NULL; MaListe->courant=NULL; MaListe->dernier=NULL; MaListe->nbrElem=0; MaListe->blnTri = 0; return MaListe; } void RAZListe(Liste*MaListe) { Element * pElem = NULL; if (MaListe == NULL) return; if (MaListe ->premier != NULL) do { pElem = MaListe->premier->Suivant ; free(MaListe->premier); MaListe->premier = pElem; } while ( MaListe->premier != NULL); MaListe->premier = NULL; MaListe->courant = NULL; MaListe->dernier = NULL; MaListe->nbrElem = 0; MaListe->blnTri = 0; return; } int ListeExiste (Liste * MaListe) { if(MaListe == NULL) return -1; else return MaListe->nbrElem; } Element * CreerElement (void) { Element * pElem = NULL; size_t size = 0; size = (size_t)sizeof(Element); pElem = (Element*)malloc(size); if (pElem != NULL) { system("cls"); printf("NOUVEL ELEVE DE LA LISTE"); printf("\nnom: "); fflush(stdin); scanf("%s", pElem->Nom); printf("\nprenom: "); fflush(stdin); scanf("%s", pElem->Prenom); printf("\nnumero: "); fflush(stdin); scanf("%s", pElem->Numero); pElem->Suivant = NULL; } return pElem; } /* void AjouterElement(Element *, Liste*); { } */[/cpp] Citer
ChandlerBing82 Posté(e) le 8 avril 2005 Signaler Posté(e) le 8 avril 2005 pourquoi tu déclares toutes tes fonctions en haut? :| Citer
dPm Posté(e) le 8 avril 2005 Auteur Signaler Posté(e) le 8 avril 2005 pourquoi tu déclares toutes tes fonctions en haut? :|[/quotemsg]parce que le prof le veut... cherches pas à comprendre le prof ^^ Citer
ChandlerBing82 Posté(e) le 8 avril 2005 Signaler Posté(e) le 8 avril 2005 nan mais c'est peut etre une convention du C j'ai très peu étudié ce langage :/ mais le message d'erreur me fait penser à des fonctions qui ne sont pas définies au bon endroit mais ce sont des erreurs de link :| Citer
matriximpulse Posté(e) le 8 avril 2005 Signaler Posté(e) le 8 avril 2005 Ouais bon ok.... :sweat: j'suis pas encore à ton niveau, je pensais peut-être être utile mais là ch'uis un peu largué désolé (j'comprends quand même le 65 % ) Citer
dPm Posté(e) le 8 avril 2005 Auteur Signaler Posté(e) le 8 avril 2005 moi je comprends vaguement, mais ma notion de pointeur est plus que vague... donc je vais pas aller loin à la base... je vais attendre qu'un Darck ou un BM par exemple passe par là ^^ :ange: Citer
Jooreixo Posté(e) le 8 avril 2005 Signaler Posté(e) le 8 avril 2005 Hmm j'ai jamais touché vraiment au C. Simplement, y a un truc que je pige pas dans tes header.. Pourquoi t'as laissé le while() dans ton if d'une part. Puisque la condition de ton while est la même que cette de ton if 'ligne 70 - 73). La seconde chose c'est que tu définis ton while, mais je vois rien qui suit.. ça me parait pas logique Citer
dPm Posté(e) le 8 avril 2005 Auteur Signaler Posté(e) le 8 avril 2005 Hmm j'ai jamais touché vraiment au C. Simplement, y a un truc que je pige pas dans tes header.. Pourquoi t'as laissé le while() dans ton if d'une part. Puisque la condition de ton while est la même que cette de ton if 'ligne 70 - 73). La seconde chose c'est que tu définis ton while, mais je vois rien qui suit.. ça me parait pas logique[/quotemsg] c'est pas un simple while.. c'est un "do...while" "faire tant que" en gros... en fait, il teste un truc, et si ça marche pas, il va faire un boucle de commandes tant que ce truc ne marchera pas... EDIT: un simple while aurait suffit je crois, mais, ça fait parti de ce que nous a donné le prof... comme il veut pas corriger 70 programmes différents..... on est noté sur le recopillage... super ! (là t'as envi de lui dire: et les autres profs, ils font comment? ils corrigent leur 150 copies différents......) Citer
Jooreixo Posté(e) le 8 avril 2005 Signaler Posté(e) le 8 avril 2005 ok je pige ce que tu me dis.. Mais encore une fois l'utilisation de ta boucle et du if.. yen a peut être un de trop. Puisque nécessairement, tu prends des valeurs de choix inférieures à 0 et supérieures à 9. Mets directement ta boucle en haut, ça te fera des lignes en moins ^^ edit : ok je dis pas que de la merde, ça me fait super plaisir ^^ Citer
elninho Posté(e) le 8 avril 2005 Signaler Posté(e) le 8 avril 2005 Faut pas mettre les définitions des fonctions dans des .c ? (j'ai un doute là-dessus :-/ ) Citer
ChandlerBing82 Posté(e) le 8 avril 2005 Signaler Posté(e) le 8 avril 2005 bah j'ai résolu le truc j'ai les sources si tu veux dPm Citer
AL1Snip Posté(e) le 8 avril 2005 Signaler Posté(e) le 8 avril 2005 Pas le courage d'y jeter un oeil après une semaine de taf Citer
Schtroumphy Posté(e) le 8 avril 2005 Signaler Posté(e) le 8 avril 2005 Il est trop fort ce chand [/quotemsg]ouais vive toi [:schtroumphy] Citer
Invité Posté(e) le 8 avril 2005 Signaler Posté(e) le 8 avril 2005 Je suis coder confirmé en C++ , ton probleme n'est pas tres dure a comprendre bordel ! je le remet : --------------------Configuration: TDprogC - Win32 Debug-------------------- Compiling... TDProg.c Linking... TDProg.obj : error LNK2001: unresolved external symbol _AjouterElement TDProg.obj : error LNK2001: unresolved external symbol _EditerListe TDProg.obj : error LNK2001: unresolved external symbol _SupprimerListe Debug/TDprogC.exe : fatal error LNK1120: 3 unresolved externals Error executing link.exe. TDprogC.exe - 4 error(s), 0 warning(s) Ca veux tous simplement dire qu'il te manque la .lib comportant par exemple dans la list le symbole : _SupprimerListe Tu dois lié la .lib dans le workspace Dans Visual C++ c'est Setting->Link Ou sinon tu peux aussi la lié avec un #pragma dans le prepocesseur . Pour info une video du Soldium Engine va etre bientot disponible . Edit : Ou le symbole n'est pas definit dans la .lib, tu dois donc le rajouter . J'ai eu ce probleme hier j'ai du le rajouter . Pour ma par c'était : picoModel_t *picoModuleTerrain; Pour ajouter la lib avec le prepocesseur #Pragma tu fait comme ceci : #pragma comment (lib, "nom.lib") Citer
ChandlerBing82 Posté(e) le 8 avril 2005 Signaler Posté(e) le 8 avril 2005 alors c'était completement pas ca. il déclarait les fonction sans les instancier en gros il se contentait du void mafonction(mon parametre); mais ca suffit pas pour le compilateur faut mettre aussi : void mafonction (mon parametre){ mon code; } Citer
Invité Posté(e) le 8 avril 2005 Signaler Posté(e) le 8 avril 2005 Je n'ai pas regarder le code j'ai juste regarder les erreur , les erreurs les plus courantes dands ca c'est les .lib non lié . ou les symboles non definit . Oui apres si il n'a pas mi son code dans sa fonction ... c'est sure que ca marche pas ... Citer
ChandlerBing82 Posté(e) le 8 avril 2005 Signaler Posté(e) le 8 avril 2005 ouaip mais a son niveau ca m'étonnait qu'il ait déja vu les lib et DLL... donc j'ai étudié son code et me suis rendu compte de ca Citer
Invité Posté(e) le 8 avril 2005 Signaler Posté(e) le 8 avril 2005 ok ok no probleme Moi j'aime bien la gestion de dll Citer
ChandlerBing82 Posté(e) le 8 avril 2005 Signaler Posté(e) le 8 avril 2005 ouaip mais on voit ca bien plus tard c'est pas que c'est super compliqué mais bon ca rajoute encore une couche a ce qu'on connait déja donc c'est une étape de plus Citer
Arcanos Posté(e) le 9 avril 2005 Signaler Posté(e) le 9 avril 2005 Le truc de déclarer toutes les fonctions en haut ça permet d'être sur que quand on l'appelle elle est déjà déclarée ^^ Ca permet un coding "propre" et moins casse tête. Citer
Damien Posté(e) le 9 avril 2005 Signaler Posté(e) le 9 avril 2005 C'est tres classique comme probleme : * Soit tu as oublie de coder les fonctions en question, * Soit tu ne compiles pas les fichiers qui les contiennent. * Soit tu ne lies pas ton executable avec la bibliotheque qui les contient. PS : c'est qui votre prof de C a l'IPSE ? Citer
Messages recommandés
Rejoindre la conversation
Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.