[prog C] expliquez moi ça


dPm

Messages recommandés

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é :)

Lien vers le commentaire
Partager sur d’autres sites

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]

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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......)

Lien vers le commentaire
Partager sur d’autres sites

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 ^^

Lien vers le commentaire
Partager sur d’autres sites

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")

Lien vers le commentaire
Partager sur d’autres sites

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 ...

Lien vers le commentaire
Partager sur d’autres sites

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.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

Chargement